Получить имя класса массива подклассов классов в TypeScript?

#arrays #typescript #reflection #subclass #subclassing

Вопрос:

У меня есть следующий класс (перенесенный из JavaScript, в котором это работает [до добавления типов]) в TypeScript:

 class A extends Array {
    private _foo: string;

    constructor(settings: any) {
        super();
        this._foo = 'foo';
    }

    get Foo() {
        return (this._foo);
    }
    set Foo(value) {
        this._foo = value;
    }
}
let test = new A({ });
test.push('1');
test.push(2);
test.push('3');

// outputs "A" in JavaScript
// outputs "Array" in TypeScript
console.log(test.constructor.name);
 

Проблема описана в нижней части фрагмента кода, я ожидаю получить имя класса обратно из test.constructor.name «A», но вместо этого получаю «Массив». Похоже, что в конкретном случае подклассов объектов массива TypeScript удаляет имя конструктора. Есть ли способ найти имя класса в TypeScript, на которое не полагается .constructor.name ?

Ответ №1:

Это происходит из-за того, что у вас есть es5 в качестве цели compilerOptions и типографские поля для заполнения class

Взгляните на сгенерированный код для es5 против ES2015.

Если вам не нужно поддерживать действительно старые браузеры, вы можете безопасно использовать более высокую цель, чем es5

Ответ №2:

Я протестировал ваш код на игровой площадке здесь

И он правильно выводит «А». Я подозреваю, что происходит что-то еще, возможно, с вашими инструментами сборки или конфигурацией.

Я бы предложил попробовать использовать его только tsc для того, чтобы сузить круг проблем. При tsc правильном выводе вы можете перейти к любым другим плагинам или шагам сборки

введите описание изображения здесь