为什么这些类型不兼容?

时间:2020-03-04 23:07:54

标签: typescript antd apollo-client graphql-codegen

我有一个像这样的值类型:

export type Value = {
   __typename?: 'Value',
  key?: Maybe<Scalars['String']>,
  label?: Maybe<Scalars['String']>,
  value?: Maybe<Scalars['String']>,
};

和类似这样的查询结果类型(生成的apollo钩子):

Maybe<Maybe<{
    __typename?: "Value" | undefined;
} & Pick<Value, "key" | "label" | "value">>[]>

我正在尝试将此查询结果传递给函数:

const getValues = (contacts: Value[]) => {
  const values = contacts.map(e => e["value"]);
  return values;
};

由于某种原因,TypeScript说这些类型不兼容。我的函数调用:

getValues( dataFilters!.caseListFilters!.contacts ) 

TypeScript错误:

Argument of type 'Maybe<Maybe<{ __typename?: "Value" | undefined; } & Pick<Value, "key" | "label" | "value">>[]>' is not assignable to parameter of type 'Value[]'.
  Type 'null' is not assignable to type 'Value[]'.ts(2345)

有人可以帮助我了解这些类型的问题吗? 我知道as Value[]解决了这个问题,但我不知道为什么。

getValues( dataFilters!.caseListFilters!.contacts as Value[] //no error )

1 个答案:

答案 0 :(得分:0)

您有Maybe类型,这些类型可以为更高的空值。因此,尽管您断言它们不是undefined在使用!,但您断言它们实际上是Maybe的东西。 Maybe类型的事物在其中 时,仍然只有 值。

也许您必须安全地解开值以获得保证值。

Maybe类型从哪里来? Sanctuary.js? fp-ts?转到“定义”,了解您正在使用的类型,然后阅读文档。您需要从中获得价值。

相关问题