簡體   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