0

我们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生成所有继承的类型?

4

0 回答 0