我使用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:类型&#39;字符串|的参数未定义&#39;不能分配给&#39;&#34;&#34;&nbsp;&#34;&nbsp;&#34;& | null |未定义&#39 ;. 输入&#39; string&#39;不能分配类型&#39;&#34; defaultString&#34; | null |未定义&#39;
如果我理解正确,那是因为_.defaultTo
期望第一个参数是T | null | undefined
的类型,而变量myString是可选字符串(即字符串或未定义)。 / p>
上面只是一个简单的演示案例,我当然可以使用三元运算符/ if语句来验证字符串。在现实世界的项目中,我一直在使用_.defaultTo
遍布不同类型的地方。
只是想知道是否有办法同时使用_.defaultTo
和strictNullChecks
?
FYI,null和undefined已添加到_defaultTo
方法:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/15895/files
答案 0 :(得分:0)
看起来像是TypeScript中的一个错误 - 它无法找到value
和defaultValue
的常见类型,如果defaultValue
只使用T
的类型defaultTo
}被声明为
defaultTo<T>(value: T | null | undefined, defaultValue: T): T;
解决方法是允许undefined
获取第二个参数(null
也可以):
defaultTo<T>(value: T | null | undefined, defaultValue: T | undefined): T | undefined;