【问题标题】:Using a Typescript anonymous class in a type qualifier在类型限定符中使用 Typescript 匿名类
【发布时间】:2020-06-08 17:45:57
【问题描述】:

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

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) 行引发编译时错误:“(匿名类)”类型的参数不可分配给“类型(匿名类)”类型的参数

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

【问题讨论】:

  • 你的代码在typescript playground. 中给出了不同的错误你能提供一个完整的例子来说明你到达那里的错误吗?

标签: typescript generics types anonymous-class


【解决方案1】:

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

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&lt;T&gt; 类必须与ColumnInterface&lt;T&gt; 接口兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    相关资源
    最近更新 更多