有沒有一種方法可以在不需要簡單地調用超類或不必要地重複非專用簽名的子類中定義實現的情況下進行以下工作?在子類或接口上定義的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