相关疑难解决方法(0)

在子类或接口上定义的 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; …
Run Code Online (Sandbox Code Playgroud)

typescript

5
推荐指数
1
解决办法
2239
查看次数

在 Node.js 中使用 EventEmitter 和 Typescript 的类型安全侦听器

给定一个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[]类型并使用自定义定义的类型。是否可以?

javascript node.js eventemitter typescript

5
推荐指数
1
解决办法
5492
查看次数

标签 统计

typescript ×2

eventemitter ×1

javascript ×1

node.js ×1