【问题标题】:Convert Maybe<string>[]' to 'string[]将 Maybe<string>[]' 转换为 'string[]
【发布时间】:2021-07-03 11:23:13
【问题描述】:

我正在使用带有生成类型的 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[]' 类型的参数。”

非常感谢任何帮助

【问题讨论】:

    标签: javascript typescript graphql-codegen


    【解决方案1】:

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

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

    或者在你的情况下

    getOrders(ids as string[]);
    

    【讨论】:

    • 您的问题是您的类型现在错误。对于 Maybe 类型,此数组中的某些字符串值可能为 null。您可能希望在转换为 string[] 之前先过滤掉 null,或者稍后在代码中遇到空指针。
    • 正确——但 OP 说 graphql 生成的类型是错误的。强制转换表示,而不是暗示类型是正确的,只需要处理。在所有其他情况下,过滤是正确的方法。
    猜你喜欢
    • 2021-07-04
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多