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

问题描述 投票:0回答:1

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

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 generics types anonymous-class
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.