繁体   English   中英

将接口类型分配给代码优先的 GraphQL 解析器参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM