我已经在同一个 Typescript 类中定义了以下两个函数签名,即:
public emit<T1>(event: string, arg1: T1): void {}
并且
public emit<T1,T2>(event: string, arg1: T1, arg2: T2): void {}
然而,当我转译 TypeScript 时,我遇到了以下错误。
error TS2393: Duplicate function implementation.
我原以为在TypeScript中,如果函数的参数数量不同,就可以重载函数。但由于上述签名分别有2个和3个参数,为什么我会收到这个转译错误?
arg2?
呢? - user663031arg2?
,即使我可能实际上并没有使用T2
,我仍然需要在emit<T1,T2>
中提供通用类型T2
。我想我正试图实现类似于C#中Func
和Action
委托签名的内容。但可能有更好的方法。 - James BT2
,那么这不会有任何影响。如果您是指调用函数,则不需要提供任何类型,例如emit<number, string>
,因为类型将从参数的类型中获取。无论如何,如果必要,只需写出两个没有主体的声明(只有分号),然后编写一个实现,以某种方式检查arg2
的存在,或者为其分配默认值。 - user663031