gpt4 book ai didi

javascript - 类型断言不执行类型转换?

转载 作者:行者123 更新时间:2023-12-01 00:37:50 25 4
gpt4 key购买 nike

我是 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,当我们通过附加 as number 来进行断言时,calculateTax(100, false) as number 变成 'nu,ber' 类型,这就是 taxNumber 可以被视为数字,如 lettaxNumber: number,那么为什么不涉及类型转换呢?

最佳答案

so why it is no type conversion involved?

他们指出,当您运行代码时,JavaScript 代码返回的就是它返回的内容。执行 as number 不会改变代码的行为,它只是告诉 typescript “我比你更了解,所以不要在这里检查我的类型”的一种方式。

如果您确实比 typescript 更了解,那么类型断言就可以了。但是如果你犯了一个错误(例如,如果你说它是一个数字,但它不是),你的代码中就会出现 typescript 无法告诉你的错误。

顺便说一句,您可以通过使用重载在此函数上执行更安全的类型:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com