$ lastName类型的字符串,用于期望类型为字符串

这可能会编码

架构

import { gql } from 'apollo-server-express';

export default gql`
  extend type Mutation {
    signUp(
      lastName: String!
    ): String!
  }
`;

解析器

{
  Query: {},Mutation: {
    signUp: async (
      _,{ lastName}
    ) => {
      try {
        console.log(lastName)
        return 'ok';    
      } catch (error) {
        return 'error';
      }
    },},};

请求

mutation($lastName:String){
  signUp(lastName:$lastName)
}

查询Veriables

{"lastName":"Darjo" }

我听不懂,但出现错误

  

类型“ \ String \”的“变量\” $ lastName \”用于期望类型为“ String!\”的位置。”,

但是当我删除标志 lastName: String时,一切正常。

我只是听不懂。是什么原因?。

liu461520 回答:$ lastName类型的字符串,用于期望类型为字符串

您已将lastName参数的类型指定为String!!表示类型为非null-换句话说,该参数是必需的,不能等于null。

在查询中,您正在定义变量($lastName)并为其分配类型。可以将参数传递给变量,但前提是它们的类型匹配。例如,如果参数采用Int,则不能将其传递给Boolean类型的变量。同样,如果参数为非null,则不能向其传递可为null的变量。那是因为可为空的变量可以为空,但这会违反参数的不可为空性。

请注意,相反的说法不正确-可为空的参数可以接受非null变量。

这是有效的:

# String! argument and String! variable
type Mutation {
  signUp(lastName: String!): String!
}

mutation($lastName:String!) {
  signUp(lastName:$lastName)
}

也有效:

# String argument and String! variable
type Mutation {
  signUp(lastName: String): String!
}

mutation($lastName: String!) {
  signUp(lastName: $lastName)
}

是这样的:

# String argument and String variable
type Mutation {
  signUp(lastName: String): String!
}

mutation($lastName: String) {
  signUp(lastName: $lastName)
}

但这不是有效的:

# String! argument and String variable
type Mutation {
  signUp(lastName: String!): String!
}

mutation($lastName: String) {
  signUp(lastName: $lastName)
}

唯一的例外是您提供变量的默认值。因此,这仍然有效:

# String! argument and String variable
type Mutation {
  signUp(lastName: String!): String!
}

mutation($lastName: String = "Some default value") {
  signUp(lastName: $lastName)
}

您可以在spec中阅读有关变量验证的信息。

本文链接:https://www.f2er.com/3078890.html

大家都在问