我在使用 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): error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type '"defaultString" | null | undefined'. Type 'string' is not assignable to type '"defaultString" | null | undefined'.
如果我没理解错的话,那是因为 _.defaultTo
期望第一个参数是 T | 的类型空 | undefined
,而变量 myString 是可选字符串(即字符串或未定义)。
以上只是一个简单的演示案例,我当然可以使用三元运算符/if 语句来验证字符串。在实际项目中,我一直在为不同的类型使用 _.defaultTo
。
只是想知道是否有办法同时使用_.defaultTo
和strictNullChecks
?
仅供引用,null 和 undefined 已添加到此处的 _defaultTo
方法:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/15895/files
最佳答案
看起来像是 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;
关于typescript - 使 lodash typings 的 defaultTo 方法与 TypeScript 编译器的 strictNullChecks 兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44836721/