首页 > 解决方案 > 打字稿从实例中提取泛型

问题描述

我有一个使用泛型的类。

class Event<P> {
 constructor( public eventName: string ) {}

 createPayload( payload: P ) {
   return payload
 }
}

我希望 TypeScript 从实例中推断出使用的泛型,这样我就不必重新定义类型。

const attackEvent = new Event<{ power: number }>("attack")

由于我在这里定义了泛型,我希望从实例中推断出它:attackEvent

我有一个需要通用的服务,这里是一个预期用途的例子:

pubSubService.publish<T>()

这是我想从中推断出泛型的理想方式Event

pubSubService.publish< attachEvent >( attackEvent.createPayload({ po}) )

这不起作用,我明白为什么。我不明白如何使这样的工作。

标签: typescripttypescript-generics

解决方案


一种解决方案是在构造函数中使用泛型参数,因此您必须在构造时传入有效负载。

class Event<P> {
    public constructor(private payload: P, public eventName: string ) {}

    public updatePayload(payload: P): void {
        this.payload = payload;

        return this.payload;
    }
}


const attackEvent = new Event({ power: 10 }, "attack");


推荐阅读