#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
правильном выводе вы можете перейти к любым другим плагинам или шагам сборки