我在TypeScript 2.2中看到了通过定义的接口调用签名来“重载”函数的选项,我花了很多时间来理解如何使用它。
所以在完成它并“破解”之后我认为将它发布在这里是值得的。
我开始的问题是,例如:
interface Func1 {
(num1: number, num2: number): number;
(str1: number, str2: string): string;
}
function F1(num1: number, num2: number): number {
return num1 + num2;
}
const f1: Func1 = F1;
console.log(f1(1, 2));
但是编译器没有通过它,因为Func1
无法接受F1
函数。
我想进行重载,我不知道该怎么做。
见下面的答案。
答案 0 :(得分:2)
C++
中。你需要让你的功能接受所有选项。
例如:
interface Func1 {
(v1: number, v2: number): number;
(v1: string, v2: string): string;
}
const f1: Func1 = (v1, v2): any => {
return v1 + v2;
};
console.log(f1("1", "2"));
console.log(f1(1, 2));
函数f1
假设有所有重载接口调用签名选项的类型,如果设置强类型,它会阻止你因为类型不可转换。例如,此示例number
无法转换为string
。
您还可以创建多个使用接口调用签名重载的函数,并将这些函数传递给f1
,如果类型匹配,它将通过。只需确保您的函数可以处理所有的接口调用签名。
在使用类时检查已实现函数中的类型或者函数参数不是很简单很重要,如上例所示,使用typeof
并控制所有选项。