Nis*_*eph 4 overloading interface function typescript
我在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));
Run Code Online (Sandbox Code Playgroud)
但编译器未通过它,因为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));
Run Code Online (Sandbox Code Playgroud)
该函数f1假定所有类型的重载接口调用签名选项都具有类型,如果您设置了强类型,则由于类型不可转换,它将阻塞您。就像在这个例子中number不适合使用string。
您还可以创建使用接口调用签名重载的多个函数,并将这些函数传递给您f1,如果类型匹配,则传递给您。只要确保您的函数可以处理所有接口调用签名即可。
使用类或函数参数不简单时(如上面的示例),使用typeof并控制所有选项,检查已实现函数中的类型非常重要。
希望能有所帮助。