Я использую 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 ответ
Чтобы удалить 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
** Вам не нужно определять его вручную, это есть в машинописном тексте, и он доступен по всему миру.
Похожие вопросы
Новые вопросы
angular
Вопросы по Angular (не путать с AngularJS), веб-фреймворку от Google. Используйте этот тег для угловых вопросов, которые не относятся к конкретной версии. Для более старой веб-платформы AngularJS (1.x) используйте тег angularjs.