下面是我教科书中的示例代码:
function calculateTax(amount: number, format: boolean): string | number {
const calcAmount = amount * 1.2;
return format ? `$${calcAmount.toFixed(2)}` : calcAmount;
}
let taxValue = calculateTax(100, false);
switch (typeof taxValue) {
case "number":
console.log(`Number Value: ${taxValue.toFixed(2)}`);
break;
case "string":
console.log(`String Value: ${taxValue.charAt(0)}`);
break;
default:
let value: never = taxValue; // taxValue's type is "never"
console.log(`Unexpected type for value: ${value}`);
}
作者说:
TypeScript 提供 never 类型,以确保一旦使用类型保护将值彻底缩小到所有可能的类型,您就不会意外使用该值
我很困惑,在默认分支中,我可以将 never 类型分配给任何其他类型,如下所示:
default:
let value: number = taxValue; // or let value: number = taxValue;
console.log(`Unexpected type for value: ${value}`);
那么作者所说的“不能意外使用值”是什么意思呢?在这个例子中,never 的目的是什么,我看不出使用“never”类型有任何好处。
最佳答案
虽然never
往往被视为一种错误类型,但事实并非如此。 never
是每种类型的子类型,如 PR 中所述。介绍一下:
never
is a subtype of and assignable to every type.
这意味着您不能将never
分配给任何其他类型,它是通用源。你不能做的就是将任何内容分配给never
:
declare let a:never
let b: string = a;
a = b // error
关于javascript - 为什么我可以将 "never"类型分配给任何其他类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58004689/