Почему эти типы несовместимы? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть тип значения, подобный этому:

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

И тип результата запроса (сгенерированные аполлон-хуки), например:

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 голосов
/ 05 марта 2020

У вас есть типы Maybe, которые можно обнулять в более высоком порядке. Итак, хотя вы утверждаете, что они не undefined используют !, вы утверждаете, что они на самом деле Maybe вещь. Вещество типа Maybe, когда оно находится там , все еще имеет значение , может быть .

Возможно, вам придется безопасно развернуть значение, чтобы получить гарантированное значение.

Откуда тип Maybe? Святилище. js? FP-TS? Go Определитесь и поймите, какой тип типа вы используете, затем прочитайте документы. Вы должны получить ценность из этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...