使用TypeScript搭建GraphQL Lambda服务器遇类型兼容错误求助
修复Apollo Server Lambda与TypeScript、GraphQL的类型冲突错误
问题场景
使用typescript@4.9.4、graphql@15.8.0、apollo-server-lambda@2.19.0搭建GraphQL Lambda服务器时,触发如下类型错误:
node_modules/apollo-link/lib/types.d.ts(5,18): error TS2430: Interface 'ExecutionResult<TData>' incorrectly extends interface 'ExecutionResult<{ [key: string]: any; }, { [key: string]: any; }>' Types of property 'data' are incompatible. Type 'TData | null | undefined' is not assignable to type '{ [key: string]: any; } | null | undefined'. Type 'TData' is not assignable to type '{ [key: string]: any; } | null | undefined'. Type 'TData' is not assignable to type '{ [key: string]: any; }'.
已尝试方案
切换GraphQL版本至^14.0.0、^16.0.0,问题未得到解决。
当前依赖片段(package.json)
"@aws-sdk/client-kms": "^3.16.0", "apollo-server-lambda": "2.19.0", "aws-embedded-metrics": "^2.0.4", "axios": "^0.24.0", "axios-retry": "^3.2.5", "graphql": "^15.5.0",
修复建议
- 锁定兼容的GraphQL版本:apollo-server-lambda@2.19.0官方兼容GraphQL
^15.3.0,TypeScript@4.9+对泛型约束更严格,直接锁定graphql@15.3.0,避免版本自动升级到15.8.0带来的类型定义差异。执行命令:npm install graphql@15.3.0 --save-exact - 临时跳过第三方库类型检查:在
tsconfig.json中添加"skipLibCheck": true,跳过node_modules中库的类型检查,不影响业务代码的类型校验,快速规避冲突。 - 升级Apollo Server至3.x版本:apollo-server-lambda@2.x版本较老旧,3.x版本对TypeScript 4.x兼容性更好,适配GraphQL 15/16版本更完善。可升级至
apollo-server-lambda@3.12.0,注意升级后需要调整初始化代码(如ApolloServer构造参数、Lambda handler写法)。 - 显式指定apollo-link版本:错误源自apollo-link的类型定义,项目可能隐式安装了不兼容版本,显式安装与apollo-server-lambda@2.19.0匹配的
apollo-link@1.2.14,解决版本不一致导致的类型冲突:npm install apollo-link@1.2.14 --save
内容的提问来源于stack exchange,提问作者Kun Wang
相关产品推荐
相关产品推荐

