我在同一个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个参数,为什么我会得到这个转换错误?
答案 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
}