gpt4 book ai didi

typescript - 整数(文字)联合类型,以 NaN 作为有效返回值

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:50 25 4
gpt4 key购买 nike

我有一个具有联合返回类型的(比较)函数。它可以返回-110。但是,我需要一个特殊情况(“结果”),因为至少有一个被比较的项目没有定义。编译器允许我添加 null 作为潜在的返回值,但不能添加 NaN(这在某些情况下是有意义的,例如比较数字或日期)。

这个编译

function myFunc(item1: MyType, item2: MyType): -1 | 0 | 1 | null {
...
}

但是对于这个,编译器说它“找不到名称 NaN”:

function myFunc(item1: MyType, item2: MyType): -1 | 0 | 1 | NaN {
...
}

为什么不允许NaN?有没有办法使用 NaN

最佳答案

NaN 本身不是类型,而是 Number 类型的 const 值。所以没有办法将任何东西定义为 NaN 类型。

这是有道理的,因为数字的文字类型都是单值,例如-1,或文字值的并集 1 | 0 | -1NaN 不是单个值,因为没有 NaN 与任何其他值进行比较,它实际上是一组无限值。

我建议使用 NaN 来指示函数的特定结果是一个坏主意,因为您可以测试获得该结果的唯一方法是调用另一个函数。最好将 nullundefined 添加到返回类型(或者,如果您不喜欢那样,可以使用文字字符串)。

请记住:

let foo = NaN;
switch(foo) {
case 1: console.log('got 1'); break
case NaN: console.log('got NaN'); break;
default: console.log('other');
}

将输出“其他”。

所以你可以这样做:

function myFunc(item1: MyType, item2: MyType): -1 | 0 | 1 | 'not comparable' {
...
}

然后您可以将结果与“不可比较”进行比较。

关于typescript - 整数(文字)联合类型,以 NaN 作为有效返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44900699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com