有没有一种方法可以使以下工作无需在子类中定义一个实现,它只是调用超类或不必要地重复非专用签名?
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; …
Run Code Online (Sandbox Code Playgroud) 给定一个Typescript接口和一个扩展Node.js EventEmitter 的类,是否可以定义自定义侦听器来对函数参数进行类型安全检查?
给出以下示例:
import { EventEmitter } from 'events';
interface Payload {
id: string;
weight: number;
}
class CustomEventEmitter extends EventEmitter {
constructor() {
super();
this.on('my_event', (data) => {
// I would like data to be implicitly inferred as Payload type
console.log(data.weight); // This should compile
console.log(data.something); // This should not compile
});
}
}
Run Code Online (Sandbox Code Playgroud)
节点 EventEmitter 侦听器定义为(...args: any[]) => void)
,我想重写该any[]
类型并使用自定义定义的类型。是否可以?