升级Node.js至23.6.0后GraphQL Codegen枚举触发strip-only模式错误
解决方法
你可以在GraphQL Codegen的配置中添加enumsAsTypes选项,让生成器把GraphQL枚举转换成TypeScript的字符串字面量联合类型(而非原生枚举),以此兼容Node.js的--experimental-strip-types模式。
修改codegen.ts配置
在每个生成目标的config字段中添加enumsAsTypes: true:
import './dotenv.js' module.exports = { generates: { 'src/generated/our-team-graphql.ts': { schema: [process.env.GRAPHQL_URL], plugins: ['typescript', 'typescript-operations', 'typescript-document-nodes'], overwrite: true, config: { enumsAsTypes: true // 添加该配置 }, }, 'src/generated/our-mobile-graphql.ts': { schema: { [process.env.MOBILE_GRAPHQL_URL]: { headers: { Authorization: `${process.env.MOBILE_GRAPHQL_AUTH_HEADER}`, }, }, }, plugins: ['typescript', 'typescript-operations', 'typescript-document-nodes'], overwrite: true, config: { withMutationFn: true, withResultType: true, enumsAsTypes: true // 添加该配置 }, }, }, }
原理说明
Node.js的--experimental-strip-types在strip-only模式下无法处理TypeScript原生枚举——因为枚举会被编译为JavaScript对象,而strip-only模式仅移除类型信息,不转换枚举结构。换成字符串字面量联合类型(比如type AccountTemplateStatus = 'ACTIVE' | 'INACTIVE')后,类型信息可直接被剥离,不会产生无法识别的语法。
验证修改
修改配置后,重新运行GraphQL Codegen:
npx graphql-codegen
生成的文件中原先的export enum会变为export type定义的联合类型,此时再执行Playwright测试就不会触发枚举相关的语法错误。
内容的提问来源于stack exchange,提问作者Chris S
相关产品推荐
相关产品推荐

