我在使用typescript和lodash的类型时遇到了这个问题(@types/lodash)。
如果我在typescript的编译器选项中启用strictNullChecks
。下面的代码将导致错误。
/// <reference path="./node_modules/@types/lodash/index.d.ts" />
const foo = (myString?: string) => {
return _.defaultTo(myString, 'defaultString');
}
index.ts(4,28):错误ts2345:“string undefined”类型的参数不能分配给“defaultstring”null undefined”类型的参数。
类型“string”不能分配给类型“defaultstring”null undefined”。
如果我理解正确,那是因为
_.defaultTo
期望第一个参数是T | null | undefined
类型,而变量mystring是一个可选字符串(即string或undefined)。上面只是一个简单的演示案例,我当然可以使用三元运算符/if语句验证字符串。在现实世界的项目中,我一直在为不同的类型使用
_.defaultTo
。只是想知道是否有办法同时使用
_.defaultTo
和strictNullChecks
?仅供参考,此处,
_defaultTo
方法中添加了空值和未定义值:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/15895/files 最佳答案
看起来像typescript中的一个bug-它找不到value
和defaultValue
的公共类型,如果defaultValue
声明为
defaultTo<T>(value: T | null | undefined, defaultValue: T): T;
解决方法是允许
T
用于第二个参数(defaultTo
也将工作):defaultTo<T>(value: T | null | undefined, defaultValue: T | undefined): T | undefined;