2

我正在使用带有生成类型的 graphql,并且正在努力将它们转换为我需要将其传递给我的数据服务调用的类型。

@graphql-codegen 给了我一个 args 类型

export type QueryOrdersArgs = {
  ids: Array<Maybe<Scalars['ID']>>;
};

(我真的不明白为什么它生成为 Maybe 类型,因为 graphql 模式强制我只使用 ids(字符串)数组的参数进行查询)

在我的解析器中,我需要调用一个接受字符串数组的服务。一切都按预期工作(使用@ts-ignore),但现在我需要修复我的类型。

const { orderIds } = args;
const result = getOrder(orderIds);

我有一个只有这里类型的代码框https://codesandbox.io/s/typescript-playground-export-forked-3fpx9?file=/index.ts

export type Maybe<T> = T | null;
export type Scalars = {
  ID: string;
  String: string;
  Boolean: boolean;
  Int: number;
  Float: number;
  _FieldSet: any;
};

let ids: Array<Maybe<Scalars["ID"]>>;

export const getOrders = (orderIds: Array<string>) => {
  orderIds.map((x) => console.log(x));
};

getOrders(ids);

我目前收到错误消息-“TS2345:'Maybe[]' 类型的参数不可分配给'string[]' 类型的参数。”

非常感谢任何帮助

4

1 回答 1

0

如果你确信它应该是 Maybe 类型,你可以强制转换它:

type Maybe<T> = T | null;
const maybeArray: Maybe<string>[] = [];
let stringArray: string[] = maybeArray as string[];

或者在你的情况下

getOrders(ids as string[]);
于 2021-04-07T16:04:28.147 回答