我是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/

10-12 12:30
查看更多