[英]Implementing GraphQL Global Object Identification in NestJS (code-first approach)
[英]Assign interface type to code-first GraphQL resolver argument
以下代码优先的 GraphQL 模式示例取自 GraphQL 的Constructing Types页面。
// Define the Query type
var queryType = new graphql.GraphQLObjectType({
name: 'Query',
fields: {
user: {
type: userType,
// `args` describes the arguments that the `user` query accepts
args: {
id: { type: graphql.GraphQLString }
},
resolve: (_, {id}) => {
return fakeDatabase[id];
}
}
}
});
尽管您可以定义 args 及其 GraphQL 类型(本示例中为 GraphQLString),但解析器中的实际 id 属性具有“任何”类型。
我尝试将{id}
替换为{id}: {id: string}
但抛出错误Type '(_: any, { id }: { id: string; })' is not assignable to type 'GraphQLFieldResolver<any, any, { [argName: string]: any; }>'
Type '(_: any, { id }: { id: string; })' is not assignable to type 'GraphQLFieldResolver<any, any, { [argName: string]: any; }>'
。
虽然这是一个简单的“字符串”示例,但我的实际代码具有更复杂的 object 类型,具有多个属性。 确保引用正确的属性名称是解析器中缺少的其他地方的一大帮助。 也许有一种方法可以告诉解析器 args 的实际类型,但我对 TypeScript 太陌生了,无法找到它。
有没有办法定义/覆盖解析器参数的类型?
我相信你遇到了这个问题中列出的同样的问题。
一种解决方法是使您的id
属性可选(通过将{id}
替换为{id}: {id?: string}
)并在引用它之前检查它在解析器中的存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.