将 Maybe<string>[]' 转换为 'string[]

问题描述

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

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

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

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

在我的解析器中,我需要调用一个接受字符串数组的服务。一切都按预期工作(使用@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[]' 类型的参数。”

非常感谢任何帮助

解决方法

如果您确信它不应该是一个 Maybe 类型,那么您可以将其强制转换:

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

或者你的情况

getOrders(ids as string[]);