首页 > 解决方案 > 无法使用 Typescript 中的泛型分配默认值

问题描述

我在 Typescript 中有这段代码。

export class CommonResponse<T extends EmptyOutputBody> {
    output: T  = new EmptyOutputBody();
    successful: boolean = false;
    responseCode: number = 200;
}

export class EmptyOutputBody {
    alerts: string[] = [];
}

我想为泛型类型属性分配一个默认值output。泛型类型T扩展EmptyOutputBody,我认为分配EmptyOutputBody泛型类型的父类()的对象T对我有用。但是这段代码给了我关于output财产的错误。它说

类型“EmptyOutputBody”不可分配给类型“T”。“EmptyOutputBody”可分配给“T”类型的约束,但“T”可以用约束“EmptyOutputBody”的不同子类型来实例化

有人可以帮我在这种情况下如何实例化泛型类型,或者我如何提供初始值output应该是 typeTEmptyOutputBody.

标签: javascripttypescriptgenerics

解决方案


对于初始分配,在声明时,您可以使用 as 语法,如下所示。

有一个巨大的讨论,你可以在这里阅读更多。

https://github.com/microsoft/TypeScript/issues/36821

export class CommonResponse<T extends EmptyOutputBody> {
  output: T = new EmptyOutputBody() as T; // Modify here
  successful: boolean = false;
  responseCode: number = 200;
}

export class EmptyOutputBody {
  alerts: string[] = [];
}
const res = new CommonResponse()
res.output = new EmptyOutputBody() // NO issue

推荐阅读