NestJS使用ConfigService获取环境变量报类型不匹配错误如何解决
问题原因
@nestjs/config 2.0及以上版本对ConfigService新增了强制类型安全约束,默认情况下如果没有给ConfigService指定环境变量的类型定义,调用get方法时的入参就会被推导为never类型。你旧项目使用的1.1.2版本没有这个特性,所以相同代码在旧项目不会报错,新项目安装的是2.x+版本就会触发类型错误。
解决方案
可根据需求任选一种:
方案1:指定ConfigService的泛型参数(推荐)
既可以解决类型报错,还能获得环境变量的类型提示能力,修改对应代码即可:
// 单次调用指定返回值类型,快速解决报错 const listeningPort = configService.get<string>('LISTENING_PORT'); // 全局定义环境变量类型,获得完整类型提示 interface EnvConfig { LISTENING_PORT: number; // 其他用到的环境变量都可以在这里补充定义 } const configService = app.get<ConfigService<EnvConfig>>(ConfigService); // 后续调用get方法时会自动校验参数合法性、推导返回值类型
方案2:降级@nestjs/config版本
不需要修改业务代码,直接把依赖版本回退到之前使用的1.1.2版本即可:
npm uninstall @nestjs/config npm install @nestjs/config@1.1.2
方案3:关闭模板类型校验(不推荐)
临时解决可以在tsconfig.json中将strictTemplates配置项设为false,但会丢失所有模板类型校验能力,不建议长期使用。
内容的提问来源于stack exchange,提问作者Ridwan Sidik
相关产品推荐
相关产品推荐

