TypeScript重载“预期的参数为0,但有2”

时间:2019-08-12 03:53:56

标签: typescript

我有一个带有重载方法的类(两个版本)。

一个版本不带任何参数。第二个可以取两个。

class DFD {
...
    getEndDatetime(): string; 
    getEndDatetime(startTime?: string, duration?: number): string {
        if (!startTime || !duration) {
            return new Date(this.getEndDatetimePOSIX()).toLocaleString();
        } else {
            this.getEndDatetimePOSIX(startTime, duration);
            return new Date(this.getEndDatetimePOSIX(startTime, duration)).toLocaleString();
        }
    }
...
}

当我致电this.getEndDateTime("8/11/2019, 11:42:17 PM", 5)时,TypeScript给我一个错误,"Expected 0 arguments, but got 2."我在这里如何满足TypeScript?

我正在使用TypeScript v3.5.2运行Node v10.16.0。我尝试过切换重载的顺序:

// Switch the order
...
    getEndDatetime(startTime?: string, duration?: number): string;
    getEndDatetime(): string { 
        ...
    }
...

TypeScript然后在代码中突出显示startTimeduration,表示找不到它。

我希望我的第一个重载实现在使用两个参数调用时不会引发任何错误,但是确实如此。

Reading from elsewhere建议我的代码通过。

1 个答案:

答案 0 :(得分:1)

这很可能是因为两个参数签名是可选的,所以编译器无法确定您要调用的方法。换句话说,getEndDateTime()可以引用您定义的签名。为此,您将希望使startTimeduration不再是可选的。

getEndDatetime(): string; 
getEndDatetime(startTime: string, duration: number): string; 
getEndDatetime(startTime?: string, duration?: number): string {
    if (!startTime || !duration) {
        return new Date(this.getEndDatetimePOSIX()).toLocaleString();
    } else {
        this.getEndDatetimePOSIX(startTime, duration);
        return new Date(this.getEndDatetimePOSIX(startTime, duration)).toLocaleString();
    }
}