我在使用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
只是想知道是否有办法同时使用_.defaultTostrictNullChecks
仅供参考,此处,_defaultTo方法中添加了空值和未定义值:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/15895/files

最佳答案

看起来像typescript中的一个bug-它找不到valuedefaultValue的公共类型,如果defaultValue声明为

defaultTo<T>(value: T | null | undefined, defaultValue: T): T;

解决方法是允许T用于第二个参数(defaultTo也将工作):
defaultTo<T>(value: T | null | undefined, defaultValue: T | undefined): T | undefined;

09-17 09:10