String 类型的 $lastName 在需要 String 类型的位置使用
$lastName of type String used in position expecting type String
这可能代码
架构
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)
}
查询变量
{"lastName":"Darjo" }
看不懂,但报错
"Variable \"$lastName\" of type \"String\" used in position expecting type \"String!\".",
但是当我删除标志时 ! lastName: String
一切正常。
我就是看不懂。是什么原因?.
您已将 lastName
参数的类型指定为 String!
。 !
表示类型是非空的——换句话说,参数是必需的,不能等于空。
在您的查询中,您定义了一个变量 ($lastName
) 并为其分配了一个类型。参数可以传递给变量,但前提是它们的类型匹配。例如,如果参数采用 Int
,则不能将类型 Boolean
的变量传递给它。同样,如果一个参数是非空的,则不能向它传递一个可为空的变量。这是因为可为 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 中阅读有关变量验证的信息。
这可能代码
架构
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)
}
查询变量
{"lastName":"Darjo" }
看不懂,但报错
"Variable \"$lastName\" of type \"String\" used in position expecting type \"String!\".",
但是当我删除标志时 ! lastName: String
一切正常。
我就是看不懂。是什么原因?.
您已将 lastName
参数的类型指定为 String!
。 !
表示类型是非空的——换句话说,参数是必需的,不能等于空。
在您的查询中,您定义了一个变量 ($lastName
) 并为其分配了一个类型。参数可以传递给变量,但前提是它们的类型匹配。例如,如果参数采用 Int
,则不能将类型 Boolean
的变量传递给它。同样,如果一个参数是非空的,则不能向它传递一个可为空的变量。这是因为可为 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 中阅读有关变量验证的信息。