类型 GQLSchema 不可分配给类型 undefined

马拉马尔

好的...我正在尝试开发一个 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数组则不会不知道为什么不起作用。有什么线索吗?

丹尼尔·雷登

在 TypeScript 中[X]是一个元组

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

输入'字符串| 数量 | boolean' 不可分配给类型 'undefined'。类型 'string' 不可分配给类型 'undefined'.ts(2322)

键入“列表 | undefined' 不可分配给类型 'Listing'。类型“未定义”不可分配给类型“列表”

'Promise <Item |类型的参数 undefined> []'不可分配给'SetStateAction <Item []>'类型的参数

类型 'string' 不可分配给类型 'undefined'。TS2769

TypeScript:'Card | 类型的参数 undefined' 不可分配给类型为 'Card' 的参数

TS2322:输入'Promise <Hero | undefined>'不可分配给'Promise <Hero>'类型

类型'MutableRefObject <HTMLInputElement | 不可分配给'string | undefined>' ((实例:HTMLInputElement | null)=>无效)

TypeScript 地图:键入 'number | undefined' 不可分配给类型 'number'

'string | 类型的参数 undefined' 不可分配给参数

打字稿错误:输入'IStory | undefined' 不可分配给类型

React:将 Api 数据传递给数组 | Undefined' 不可分配给类型 'GridRowsProp'

输入'字符串| undefined' 不可分配给 Angular 12 模板中的类型 'string'

类型'string'不可分配给类型'“” | “,” | “” | “。”'

类型“{}”不可分配给类型“IProps”

类型“ {}”不可分配给类型“ T”

类型“ void”不可分配给类型“ FormData”

类型“ Array []”不可分配给类型“ [Array]”

类型“ void”不可分配给类型“ User []”

类型“无效”不可分配给类型“订阅”

类型 AbstractControl 不可分配给类型 FormGroup

类型“ void”不可分配给类型“ ObservableInput <{}>”

类型 '() => Element' 不可分配给类型 'string'

类型不可分配给类型 LibraryManagedAttributes

类型“ Array []”不可分配给类型“ [Array]”

类型“ Observable <any>”不可分配给类型“ []”

类型对象不可分配给类型 any[]

类型“ any []”不可分配给类型“从不”

类型不可分配给类型T

类型 '() => void' 不可分配给类型 'string'