我正在为我的 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: DTO
or 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)
//编译,但抛出运行时错误:错误:令牌“”不存在。