Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重载函数类型中的漏洞_Javascript_Typescript - Fatal编程技术网

Javascript 重载函数类型中的漏洞

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;

我不熟悉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;
    }
    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