【问题标题】:Type GQLSchema is not assignable to type undefined类型 GQLSchema 不可分配给未定义类型
【发布时间】:2021-02-28 02:16:05
【问题描述】:

好的...我是 trying to develop 一个 GraphQL 解决方案,可以将多个类型定义附加到 express-graphql graphqlHTTP() typeDef 属性,而无需担心为每种类型创建单个架构或嵌套字符串。

我的问题是每当我将参数数组传递给函数createSchema() 时,它会在数组的第二项上显示错误(是的,不是在第一项中): 注意:不确定第二个问题是实际错误还是警告。我猜这是警告。

所以,这就是函数本身:

  static createSchema(typeDefs: GQLSchema | [GQLSchema]): string {
    let schema = '';

    if (Array.isArray(typeDefs)) {
      typeDefs.forEach((typeDef) => {
        schema += GQLHTTPTools.addSchema(typeDef);
      });
    } else {
      schema = GQLHTTPTools.addSchema(typeDefs);
    }

    return schema;
  }

  // just in case:
  private static addSchema(typeDef: GQLSchema): string {
    const { types } = typeDef;
    let schema = '';

    if (types.Query !== undefined) {
      schema += `type Query {\n\t${types.Query}\n}\n`;
      delete types.Query;
    }
    if (types.Mutation !== undefined) {
      schema += `type Mutation {\n\t${types.Mutation}\n}\n`;
      delete types.Mutation;
    }
    if (types.Custom !== undefined) {
      schema += types.Custom.map((type) => {
        const key = Object.keys(type)[0];
        const val = Object.values(type)[0];
        return `type ${key} {\n\t${val}\n}`;
      });
    }

    return schema;
  }

不确定它是否重要,但这是GQLSchema 类定义:

export default class GQLSchema {
  constructor(public totalTypes: number, public totalCustomTypes: number, public types: GQLType) {}
}

如果我确实传递了一个 GQLSchema 对象,它就可以工作......但如果我使用 GQLSchema 数组则不行。不知道为什么不起作用。有什么线索吗?

【问题讨论】:

  • 你有堆栈跟踪吗?错误发生在哪一行?
  • 我在图片中添加了一行,是 41,我的错。
  • 除了 tuple-vs-array 问题之外,在实际处理字符串时,不应使用 GQLSchema 作为类型。虽然,实际的根本问题首先是使用字符串 - 任何 graphql 库都应该使用对象。或者你想重新发明printSchema

标签: javascript node.js typescript graphql


【解决方案1】:

在 TypeScript 中,[X]Tuple

元组类型允许您用固定数量的元素表示数组,这些元素的类型是已知的,但不必相同。

所以[X] 表示长度正好为1 的数组,其中第一个元素的类型为X[X, Y] 表示长度正好为 2 的数组,其中第一个元素的类型为 X,第二个元素的类型为 Y。以此类推。

如果您的意图是键入任意长度的数组,其中每个元素都是特定类型,请改用 ArrayX[]Array<X>(它们是等效的)。

【讨论】:

  • 其实第二个错误是因为打字错误而产生的,但确实帮助我理解了第一个。谢谢。
猜你喜欢
  • 2021-07-02
  • 1970-01-01
  • 2021-04-29
  • 2022-01-07
  • 2017-10-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
相关资源
最近更新 更多