Как вы получаете свойства универсального типа в Typescript - PullRequest
0 голосов
/ 06 марта 2019

Я создал базовый класс в Typescript, который имеет универсальный тип и логику для заполнения таблицы данных. Этот класс будет расширен компонентами Angular, которые будут проходить различные классы. Я хотел бы получить свойства универсального типа, чтобы я мог динамически определять заголовки столбцов. Как я могу получить свойства класса, тип которого используется? Пожалуйста, помогите.

Ниже приведено описание того, как я пытался это сделать. Я пытался динамически заполнить displayColumns свойствами класса Dog или Cat:

export class MyBaseClass<T>
{
    public displayedColumns: string[] = [];

     constructor()
    {
       let dataItem: T = {} as T;
       Object.keys(dataItem).forEach((key: string) => this.displayedColumns.push(key));
    }
}

export class PetsComponent extends MyBaseClass<Dog>
{

}

export class Dog
{
    public Id: number = 0;
    public Name: string = "";
}

export class Cat
{
    public Id: number = 0;
    public Name: string = "";
}

1 Ответ

0 голосов
/ 06 марта 2019

Как я могу получить свойства класса, тип которого используется?

Типы существуют только во время компиляции и стираются во время сборки, когда генерируется JavaScript. Таким образом, вы не должны полагаться на интеллектуальную информацию о типах среды выполнения из экземпляров обобщений.

Предложение

Думайте в терминах данных вместо типов. Например. взять строки как string[][] (2d массив строк / столбцов) и предоставить самим классам возможность анализировать свои данные в требуемый 2d массив.

...