0

我正在为我的 kafka nestjs 微服务使用 AsyncApi 装饰器,但我不知道如何定义消息类型。这是装饰器的样子:

@AsyncApiSub({
    channel: Topics.MESSAGE_CREATE,
    description: "...",
    message: {
        name: "CreateMessageResult",
        payload: {
            type: () => /* don't know how to write here */
        }
    }
})

此装饰器中的消息定义为:

export interface AsyncOperationOptions extends Omit<AsyncOperationObject, 'message'> {
    message: {
        name: string;
        payload: {
            type: Type<unknown> | Function | [Function] | string;
        };
    };
}

如果方法的结果是一些DTO,这很简单。然后只写type: DTOor type: () => DTO。但是我的方法返回值被定义为泛型类,例如:

export class EventResponse<T = any> {
    protected status: Status = Status.OK;

    constructor(
        protected readonly payload: T
    ) {
    }

    getStatus(): Status {
        return this.status;
    }

    getPayload(): T {
        return this.payload;
    }

    toString(): string {
        return JSON.stringify({
            status: this.getStatus(),
            payload: this.getPayload(),

        })
    }
}

有人可以帮助我,如何使用这个泛型类作为类型?这不起作用:

type: EventResponse<Message> //TS2348: 'typeof EventResponse' 类型的值不可调用。您的意思是包括“新”吗?

type: new EventResponse<Message>(new Message)//TS2322:类型 'EventResponse' 不可分配给类型 'string | 功能 | 类型 | [功能]'。类型“EventResponse”不可分配给类型“[Function]”

type: () => new EventResponse<Message>(new Message)//编译,但抛出运行时错误:错误:令牌“”不存在。

4

0 回答 0