具有多个呼叫签名的TypeScript接口

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函数。

我想超载,但我不知道该怎么办。

请参阅下面的答案。

Nis*_*eph 5

挖掘之后,我发现我们可以做很多重载。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并控制所有选项,检查已实现函数中的类型非常重要。

希望能有所帮助。