有没有一种方法可以在不需要简单地调用超类或不必要地重复非专用签名的子类中定义实现的情况下进行以下工作?在子类或接口上定义的Typescript专用重载
class Emitter {
on(name: 'one', handler: (value: number) => void): void;
on(name: string, handler: (...args: any[]) => void): void;
on(name: string, handler: (...args: any[]) => void): void {
// do stuff
}
}
class Subclass extends Emitter {
on(name: 'two', handler: (value: string) => void): void;
on(name: string, handler: (...args: any[]) => void): void;
// error no implementation specified
}
interface IEmitter {
on(name: 'one', handler: (value: number) => void): void;
on(name: string, handler: (...args: any[]) => void): void;
}
interface ISubclass extends IEmitter {
on(name: 'two', handler: (value: string) => void): void;
// error overload not assignable to non specialized
}
感谢瑞安!这种方法是可行的,但与在接口上声明方法重载(ala addEventListener)非常不同。有没有可能未来版本的TypesScript将允许类的方法重载来重用基类实现(假设它是兼容的)? – 2015-02-25 02:34:28
不太可能,因为这可能需要一些新的语法或重大更改。 – 2015-02-25 05:23:56
函数在原型上运行的版本有一个缺点,函数不能调用同一类中的其他私有函数。 – 2017-04-27 11:37:37