我正在尝试迁移一个设置,它生成的所有类型都与服务器所具有的类型完全相同,而这个设置只基于我们编写的文档节点。
我目前在.graphqlrc.js
中有此配置
/** @type {import('graphql-config').IGraphQLConfig} */
const graphqlConfig = {
schema: process.env.NEXT_PUBLIC_API_URL,
documents: './src/graphql/**/*.ts',
extensions: {
codegen: {
hooks: {
afterAllFileWrite: ['prettier --write'],
},
generates: {
'./src/__generated__/graphql.ts': {
plugins: [
'typescript',
'typescript-operations',
{
add: {
content: '/* eslint-disable */',
},
},
],
config: {
disableDescriptions: true,
},
},
'./src/__generated__/introspection-result.ts': {
plugins: ['fragment-matcher'],
config: {
useExplicitTyping: true,
},
},
},
},
},
}
这就产生了如下的结果
export type QueryName = {
__typename?: 'Query'
resource?:
| { __typename?: 'A' }
| { __typename?: 'B' }
| {
__typename?: 'C'
id: string
prop1: any
prop2: any
}
}
这可不是我所期望的我期待的是
export type QueryName = {
__typename?: 'Query'
resource?: {
__typename?: 'C'
id: string
prop1: any
prop2: any
}
}
因为我只查询C
。当前生成的类型将影响很多代码,而如果我可以输出我想要实现的,我们只需要更改类型。
我试着玩配置发现here,但无法找到解决方案。请让我知道这是可能的,或者如果有什么我可以看看,以解决这个问题。
先谢谢你了!
3条答案
按热度按时间zte4gxcn1#
我最终使用了tiny-invariant包。考虑ff代码
vnjpjtjt2#
你也可以
以确保它引用的是您需要的联合中的类型
xdyibdwo3#
有一个很好的解决方案!
例如,你有这样的东西:
然后,可以使用提取实用程序类型
从这些类型中,您可以在将来构造任何类型。