【问题标题】:Make lodash typings' defaultTo method compatible with TypeScript compiler's strictNullChecks使 lodash 类型的 defaultTo 方法与 TypeScript 编译器的 strictNullChecks 兼容
【发布时间】:2017-12-03 20:08:05
【问题描述】:

我在使用 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”类型的参数 |空 |不明确的'。 类型 'string' 不可分配给类型 '"defaultString" |空 |未定义'。

如果我理解正确,那是因为 _.defaultTo 期望第一个参数是 T | null | undefined 类型,而变量 myString 是可选字符串(即字符串或未定义)。

以上只是一个简单的演示案例,我当然可以使用三元运算符/if 语句来验证字符串。在现实世界的项目中,我一直在使用_.defaultTo 来处理不同的类型。

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

仅供参考,此处将 null 和 undefined 添加到 _defaultTo 方法中:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/15895/files

【问题讨论】:

    标签: typescript lodash typescript-typings


    【解决方案1】:

    看起来像 TypeScript 中的一个错误 - 它无法找到 valuedefaultValue 的通用类型,并且如果 T 声明为

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

    解决方法是允许undefined 作为第二个参数(null 也可以):

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

    【讨论】:

      猜你喜欢
      • 2019-08-19
      • 2020-06-30
      • 1970-01-01
      • 2021-10-09
      • 2022-01-22
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多