typescript - 使 lodash typings 的 defaultTo 方法与 TypeScript 编译器的 strictNullChecks 兼容

标签 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): 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

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

仅供引用,null 和 undefined 已添加到此处的 _defaultTo 方法:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/15895/files

最佳答案

看起来像是 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;

关于typescript - 使 lodash typings 的 defaultTo 方法与 TypeScript 编译器的 strictNullChecks 兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44836721/

相关文章:

javascript - 使用 Lodash _.chain() 进行条件判断

Typescript 通用数组类型和推送项

typescript - 我应该如何在 TypeScript 2 中使用 @types

Angular4 Material 输入显示不正确

Angular:HTTP GET 请求 - 选项 405(不允许方法)

typescript - Twin.Macro(样式化组件)+ NextJS 中的 Typescript : Argument of type 'Interpolation<never>' is not assignable to parameter of type

typescript 不能将 'new' 与类型缺少调用或构造签名的表达式一起使用

angular - Ionic 4 无法导入自定义组件不是已知元素

javascript - 如何将一个数组的值解压到另一个数组的特定索引中?

javascript - 计算特定键的数量