我是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'类型,这就是taxNumber
可以被认为是数字的方式,例如>,那么为什么不涉及类型转换呢? 最佳答案
那么为什么不涉及类型转换呢?
他们指出,当您运行代码时,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);
关于javascript - 类型断言不执行类型转换吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57949781/