使用lodash的_.isNil函数进行TypeScript类型收窄失效如何解决?
问题原因
TypeScript 4.4 版本的控制流分析对 _.isNil(localEnv) === false 这类布尔全等判断的反向类型推导支持有限,无法正确触发类型谓词的类型收窄逻辑。另外如果未正确安装lodash对应的类型声明包,也会导致isNil的类型守卫能力失效。
解决方法
- 方案1:调整条件判断写法
替换反向全等判断为取反运算符,即可正常触发类型收窄:
也可以改为正向分支判断,类型收窄的兼容性更好:if (!_.isNil(localEnv)) { config.env = localEnv; }if (_.isNil(localEnv)) { // 可补充兜底逻辑,比如抛出错误或者设置默认值 throw new Error('缺少app_env环境变量配置') } config.env = localEnv; - 方案2:检查lodash类型声明包
先确认已安装匹配版本的类型声明包:
如果已安装仍有问题,可核对npm install @types/lodash -D@types/lodash的大版本和项目中安装的lodash大版本保持一致。 - 方案3:自定义类型守卫(兜底方案)
如果不想依赖lodash的类型声明,可以自己实现泛型非空判断的类型守卫:function isNotNil<T>(value: T | null | undefined): value is T { return value !== null && value !== undefined } if (isNotNil(localEnv)) { config.env = localEnv; }
内容的提问来源于stack exchange,提问作者Ondrej11
相关产品推荐
相关产品推荐

