0

graphql-codegen/typescript-apollo-angular用来生成打字稿的代码可以在我们的 Angular 应用程序中使用。我们决定启用strictNullChecks唯一的问题是我们使用以下模式来指定 API 返回的内部节点的类型:

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

在我的情况下somethingMaybe<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也许有不同的方法可以做到这一点。

4

1 回答 1

3

要从类型中删除null/undefined您可以使用NonNullable实用程序。

NonNullable<T>通过排除nullundefined从构造一个类型T

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

操场


NonNullable实用程序是用条件类型构建的

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

** 您不需要手动定义它,typescript 提供它并且它在全球范围内可用。

于 2020-04-16T10:20:51.857 回答