我是Typescript的新手,只是有关类型断言的问题。
以下是我的教科书中的一个示例:
function calculateTax(amount: number, format: boolean): string | number {
const calcAmount = amount * 1.2;
return format ? `$${calcAmount.toFixed(2)}` : calcAmount;
}
let taxNumber: string | number = calculateTax(100, false);
let taxString: string | number = calculateTax(100, true);
书上写着:
类型断言不执行任何类型转换,类型断言仅告诉编译器应将哪种类型的类型应用于值,以进行类型检查。所以它们等同于这些语句
let taxNumber: number = calculateTax(100, false) as number;
let taxString: string = calculateTax(100, true) as string;
我很困惑,所以calculateTax(100, false)
是string | number
,当我们通过在其末尾附加数字来进行断言时,calculateTax(100, false) as number
变成'nu,ber'类型,这就是{{ 1}}可以视为taxNumber
的数字,那么为什么不涉及类型转换?
答案 0 :(得分:2)
那为什么不涉及类型转换呢?
他们指出,当您运行代码时,javascript代码返回的就是它返回的内容。 as number
不会改变代码的行为,它只是告诉打字稿“我比你更了解,所以不要在这里检查我的类型”。
如果您确实比打字稿更了解,则可以使用类型断言。但是,如果您犯了一个错误(例如,如果您说的不是数字,则为数字),那么您的代码中将会出现一个错误,即打字稿无法告诉您。
顺便说一句,您可以通过使用重载在此函数上进行更安全的类型:
function calculateTax(amount: number, format: true): string;
function calculateTax(amount: number, format: false): number;
function calculateTax(amount: number, format: boolean): string | number {
const calcAmount = amount * 1.2;
return format ? `$${calcAmount.toFixed(2)}` : calcAmount;
}
let taxNumber: number = calculateTax(100, false);
let taxString: string = calculateTax(100, true);