Введите псевдоним из свойства, которое может иметь значение null с strictNullChecks - PullRequest
0 голосов
/ 16 апреля 2020

Я использую graphql-codegen/typescript-apollo-angular для генерации машинописного кода, который можно использовать в нашем приложении Angular. Мы решили включить strictNullChecks, единственная проблема заключается в том, что мы используем следующий шаблон для указания типов внутренних узлов, возвращаемых API:

type ListSomethingEdge = ListSomethingQuery["something"]["edges"][0];

В моем случае something генерируется как Maybe<Array<...>> что правильно. Когда я включаю strictNullChecks, приведенный выше код больше не работает, поскольку что-то также может быть неопределенным / нулевым.

Property 'edges' does not exist on type '({ __typename?: "SomethingConnection" | undefined; } & Pick<SomethingConnection, "totalCount"> & { edges?: Maybe<{ __typename?: "SomethingEdge" | undefined; } & { ...; }>[] | null | undefined; pageInfo: { ...; } & Pick<...>; }) | null | undefined'.ts(2339)

Мне не удалось найти документацию о том, как удалить типы null / undefined из псевдонима типа, подобного этому. Может быть, есть другой способ сделать это.

1 Ответ

3 голосов
/ 16 апреля 2020

Чтобы удалить null / undefined из типа, который вы можете использовать, утилита NonNullable .

NonNullable<T> создает тип, исключая null и undefined из T

type ListSomethingEdge = NonNullable<ListSomethingQuery["something"]>["edges"][0];

Детская площадка


NonNullable Утилита построена с условными типами

type NonNullable<T> = T extends null | undefined ? never : T

** Вам не нужно определять его вручную, машинопись предоставляет его, и он доступен по всему миру.

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