【问题标题】:Typescript function returning value without null or undefined打字稿函数返回没有 null 或 undefined 的值
【发布时间】:2019-07-11 22:34:29
【问题描述】:

我正在尝试编写一个返回值的函数,或者如果该值为 null 或未定义,它应该返回一个默认值。

function test<A, B>(input: A, fallbackValue: B): NonNullable<A> | B {
 if (input == null || input == undefined) {
   return fallbackValue;
 } else {
   return input;
 }
}

我得到了错误

Type 'A' is not assignable to type 'B | NonNullable<A>'.
  Type 'A' is not assignable to type 'NonNullable<A>'.

NonNullable 应该是没有 null 或 undefined 的 A,这就是我在 if 中检查的内容?

Here is the code in ts playground.

【问题讨论】:

  • 你的 if 和 else 分支不是交换了吗?
  • 糟糕,是的。在示例中修复它,但错误是一样的:)
  • 您声明了input: A,但返回了NonNullable&lt;A&gt;。看来您要么需要声明input: NonNullable&lt;A&gt;,要么返回A | B。您可以将返回类型转换为 NonNullable&lt;A&gt; 但这可能是一个逻辑错误。

标签: typescript


【解决方案1】:

条件类型(其中NonNullable 是)通常不能在泛型函数中提供良好的实现。您可以使用类型断言来使其工作 (return input as any);

一种更安全的方法可能是稍微切换类型:

function test<A, B>(input: A | undefined | null, fallbackValue: B): A | B {
    if (input == null || input == undefined) {
        return fallbackValue;
    } else {
        return input;
    }
}

declare var s: string | null;
let a = test(s, "") // string

【讨论】:

  • 好的。谢谢。你的解决方案对我有用。但是我对 NonNullable 的使用是错误的,还是打字稿中的错误/缺失功能,还是按预期工作?
  • @Dirk 这是一个限制(不确定将来是否可以解决)
猜你喜欢
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 2019-10-12
  • 2013-08-13
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
相关资源
最近更新 更多