首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于期望类型字符串位置的类型字符串的$lastName

用于期望类型字符串位置的类型字符串的$lastName
EN

Stack Overflow用户
提问于 2019-11-18 17:42:32
回答 1查看 13.5K关注 0票数 9

这可能是密码

模式

代码语言:javascript
复制
import { gql } from 'apollo-server-express';

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

解析器

代码语言:javascript
复制
{
  Query: {},
  Mutation: {
    signUp: async (
      _,
      { lastName}
    ) => {
      try {
        console.log(lastName)
        return 'ok';    
      } catch (error) {
        return 'error';
      }
    },
  },
};

请求

代码语言:javascript
复制
mutation($lastName:String){
  signUp(lastName:$lastName)
}

查询版本

代码语言:javascript
复制
{"lastName":"Darjo" }

我不明白,但我错了

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

但是当我移除标志! lastName: String时,一切都正常了。

我只是不明白。原因是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-18 19:53:18

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

在查询中,您定义了一个变量($lastName),并为它分配了一个类型。参数可以传递变量,但只有在它们的类型匹配时才能传递。例如,如果参数采用Int,则不能将Boolean类型的变量传递给它。类似地,如果一个参数是非空的,则不能向它传递一个可为空的变量.这是因为可空变量可能为null,但这违反了参数的非空性。

注意,相反的情况不是真--一个可空的参数可以接受一个非空变量。

这是有效的:

代码语言:javascript
复制
# String! argument and String! variable
type Mutation {
  signUp(lastName: String!): String!
}

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

同样有效的是:

代码语言:javascript
复制
# String argument and String! variable
type Mutation {
  signUp(lastName: String): String!
}

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

如下所示:

代码语言:javascript
复制
# String argument and String variable
type Mutation {
  signUp(lastName: String): String!
}

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

但这是无效的:

代码语言:javascript
复制
# String! argument and String variable
type Mutation {
  signUp(lastName: String!): String!
}

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

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

代码语言:javascript
复制
# String! argument and String variable
type Mutation {
  signUp(lastName: String!): String!
}

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

您可以在等级库中阅读有关变量验证的内容。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58920213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档