我们graphql-codegen
用于为 graphql 操作生成类型。在我们的模式中,我们有 50 多种实现通用基础接口的类型Item
。
示例:所有类型都实现Item
:
type Query {
datasource(value: String!): Item
}
interface Item {
name: String!
}
type TypeA implements Item {
name: String!
other: String!
}
type TypeB implements Item {
name: String!
somethingElse: String!
}
type TypeC implements Item {
name: String!
}
示例查询:
query MyData($datasource: String!) {
datasource(value: $datasource) {
... on TypeA {
name
other
}
}
}
当使用插件生成 Typescript 时typescript-operations
,我们最终会得到如下所示的类型:
export type MyDataQuery = {
__typename?: 'Query';
datasource?:
| { __typename?: 'TypeA'; name: string; other: string }
| { __typename?: 'TypeB' } # <!-- not needed
| { __typename?: 'TypeC' } # <!-- not needed
| null
| undefined;
};
注意 TypeB 和 TypeC 也包含在选项中。这导致我们的 50 多种类型继承了巨大的生成类型Item
。
有没有办法准确指定应该使用什么类型(可能在查询中?)而不是Item
生成所有继承的类型?