繁体   English   中英

在类型限定符中使用 Typescript 匿名 class

[英]Using a Typescript anonymous class in a type qualifier

我正在尝试创建一个通用表构建器 class。 在表生成器中,我定义了一个匿名 class 来存储列定义。 我希望表生成器将这些定义的实例存储在一个数组中。 这是我目前正在使用的简化 class 定义:

export class TableBuilder<T> {

  Column = class {
    constructor(public data: T) {}
  }

  private columns: Array<TableBuilder['Column']>

  column(data: T) {
    const col = new this.Column(data);
    this.columns.push(col);
  }
}

this.columns.push(col)行抛出编译时错误: “(匿名类)”类型的参数不可分配给“typeof(匿名类)”类型的参数

有没有办法将columns成员定义为匿名 class 实例的数组? 我可以将其定义为类型any[] ,但我更喜欢保留列条目类型强制的解决方案。

您必须定义一个自定义构造函数类型,该类型生成具有特定接口的列对象。 像这样的东西:

interface IColumn<T> {
    //define column interface here
}

interface IColumnConstructor<T> {
    new(data: T): IColumn<T>;
}

class TableBuilder<T> {
    private Column: IColumnConstructor<T> = class<T> {
        constructor(public data: T) { }
    }

    private columns: IColumn<T>[] = [];

    public column(data: T) {
        const instance = new this.Column(data);
        this.columns.push(instance);
    }
}

如果出现这种情况,您的匿名class<T> class 必须与ColumnInterface<T>接口兼容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM