下面是我的课本中的示例代码:
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类型分配为以下任何其他类型:
default:
let value: number = taxValue; // or let value: number = taxValue;
console.log(`Unexpected type for value: ${value}`);
那么,作者“不能偶然使用值”是什么意思?在这个例子中,永不目的是什么,我看不出使用“永不”类型有什么好处。
答案 0 :(得分:3)
尽管never
往往被视为一种错误类型,但事实并非如此。 never
是每种类型的子类型,如介绍它的PR所述:
never
是每种类型的子类型,可以分配给每种类型。
这意味着您可以将never
分配给任何其他类型,这是通用来源。您无法做的就是为never
分配任何内容:
declare let a:never
let b: string = a;
a = b // error