我正在使用graphql- codegen 为我的 React 项目生成 Typescript 类型。使用 graphql,您可以设置查询以仅返回您需要的属性。这很有用,但也会导致我的 Typescript 定义文件看起来非常复杂的对象类型。我有一个Query
返回几个嵌套项目。我想知道是否可以仅提取tags
属性的类型?
我将如何使用 Typescript 提取以下类型:
tags?: Maybe<Array<Maybe<(
{ __typename?: 'Tag' }
& Pick<Tag, 'id' | 'name'>
)>>>
从这个基础对象类型(我已经指出了我想提取的类型的一部分):
type ManageTeamPageQuery = (
{ __typename?: 'Query' }
& { authedTeam?: Maybe<(
{ __typename?: 'Team' }
& Pick<Team, 'id' | 'name' | 'imageEnding' | 'facebookPixelId' | 'subscriptionId'>
& { domains?: Maybe<Array<Maybe<(
{ __typename?: 'Domain' }
& Pick<Domain, 'id' | 'name'>
)>>>, tags?: Maybe<Array<Maybe<( <--------- HERE
{ __typename?: 'Tag' } <----------------- HERE
& Pick<Tag, 'id' | 'name'> <------------- HERE
)>>> }
)> }
);
对我来说棘手的是嵌套属性可以为空或未定义,所以我不确定如何深入访问它们?
请注意,graphql-codegen 定义Maybe
为:
export type Maybe<T> = T | null;
作为参考,ManageTeamPageQuery
从 graphql 的结果生成的类型如下所示:
query ManageTeamPage($id: Int!) {
authedTeam(id: $id) {
id
name
imageEnding
facebookPixelId
subscriptionId
domains {
id
name
}
tags {
id
name
}
}
}