0

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

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 ) 

打字稿错误:

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 )
4

1 回答 1

0

你有可能的类型,它们是更高阶的可空值。因此,尽管您断言它们没有undefined使用!,但您是在断言它们实际上Maybe是事物。一种Maybe类型的东西,当它那里时,仍然只是可能的价值。

对于一个也许你必须安全地解开价值以获得保证价值。

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

于 2020-03-05T01:28:44.320 回答