打字稿重复功能实现

时间:2016-09-25 17:30:56

标签: javascript typescript

我在同一个Typescript类中定义了以下两个函数签名,即

public emit<T1>(event: string, arg1: T1): void {}

public emit<T1,T2>(event: string, arg1: T1, arg2: T2): void {}

然而,当转换打字稿时,我得到以下错误

error TS2393: Duplicate function implementation.

我认为你可以在typescript中重载函数,只要函数签名中的参数数量不同。鉴于上述签名分别有2个和3个参数,为什么我会得到这个转换错误?

1 个答案:

答案 0 :(得分:15)

我假设您的代码如下所示:

public emit<T1>(event: string, arg1: T1): void {}
public emit<T1,T2>(event: string, arg1: T1, arg2: T2): void {}
public emit(event: string, ...args: any[]): void {
    // actual implementation here
}

问题是前两行之后你有{}。这实际上定义了函数的空实现,即:

function empty() {}

您只想为函数定义类型,而不是实现。所以用一个分号替换空块:

public emit<T1>(event: string, arg1: T1): void;
public emit<T1,T2>(event: string, arg1: T1, arg2: T2): void;
public emit(event: string, ...args: any[]): void {
    // actual implementation here
}