Javascript 重载函数类型中的漏洞
我不熟悉typescript,只是关于重载函数类型的问题。下面是我书中的一个例子:Javascript 重载函数类型中的漏洞,javascript,typescript,Javascript,Typescript,我不熟悉typescript,只是关于重载函数类型的问题。下面是我书中的一个例子: function calculateTax(amount: number): number; function calculateTax(amount: null): null; function calculateTax(amount: number | null): number | null { if (amount != null) { return amount * 1.2;
function calculateTax(amount: number): number;
function calculateTax(amount: null): null;
function calculateTax(amount: number | null): number | null {
if (amount != null) {
return amount * 1.2;
}
return null;
}
let taxAmount: number = calculateTax(100);
console.log("Tax value", taxAmount);
我的想法是,重写函数类型可以将开发人员从手动检查类型中解救出来,如下所示:
// without type override
let taxAmount: number | null = calculateTax(100);
if (typeof taxAmount === "number") {
console.log("Tax value", taxAmount);
}
但如果我将代码修改为:
function calculateTax(amount: number): number;
function calculateTax(amount: null): null;
function calculateTax(amount: number | null): number | null {
if (amount != null) {
if (amount > 200) {
return amount * 1.2;
} else {
return null
}
}
return null;
}
let taxAmount: number = calculateTax(100);
console.log("Tax value", taxAmount);
因为我传递了一个<200的值,所以CalculateAX(100)
返回null,但是taxAmount
应该被分配一个数字,但现在它就像:
let taxAmount: number = null;
上面的语句应该失败,但由于类型重写,没有编译错误,所有内容都编译并工作,结果是错误的
税值为空
当使用类型重写时,typescript中不是有一个循环孔吗?数字变量赋值为null