做lodash打字' defaultTo方法与TypeScript编译器的strictNullChecks兼容

时间:2017-06-29 23:59:03

标签: typescript lodash typescript-typings

我使用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遍布不同类型的地方。

只是想知道是否有办法同时使用_.defaultTostrictNullChecks

FYI,null和undefined已添加到_defaultTo方法:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/15895/files

1 个答案:

答案 0 :(得分:0)

看起来像是TypeScript中的一个错误 - 它无法找到valuedefaultValue的常见类型,如果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;