我在Type Script 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
函数。我想超载,我不知道该怎么办。
见下面的答案。
最佳答案
在挖掘之后,我发现我们可以做很多超载的事情。typescript中的重载与任何其他javascript代码没有区别。它必须在一个函数中实现,而不是在多个函数中实现,如在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
并控制所有选项。希望有帮助。