У меня есть этот код:
var x = {
x1: 5,
x2: 7
};
var y = {
...x,
_originalX2: x.x2,
get x2() {
console.log(this.x1);
return 9;
}
};
console.log(y.x2);
var z = {
...x,
_originalX2: x.x2
};
Object.defineProperty(z, 'x2', {
get: function() {
console.log(this.x1);
return 9;
}
})
console.log(z.x2);
Когда я запускаю это как JavaScript в браузере или в NodeJS, я получаю вывод:
5
9
5
9
Когда я запускаю тот же код, что и TypeScript (см. https://repl.it/repls/TornHomelyThing) , я получаю вывод:
undefined
9
5
9
I also see what JS TS generates from it @ https://www.typescriptlang.org/play/?ssl=1&ssc=1&pln=22&pc=1#code/G4QwTgBAHhC8EG8oEYBcECsAaaAmdA7AL4DcAUGaJAJ5yJkQQB0LUODEA+gPZgCWAcz4A7EABsAGvihMoudowEBTAC54AFAEoEHRgGNuwgM7cxSpmO4D1KgBZ8js5JvKNGYVQFcwwiAE5XCCIyUjIDY1NzS2tqWVwXCioIAC86HUYWWQUuXkERcSlUGTkQ8gB5ACMAKyU9FSYAEyUAMxElAAUwbgAHJTAVanVknAByORGcBAhlFXRmz2E6vkMtejcIcJMzCysbe0cUBPWPFW9fAI4iIM0wwy2o3eS4hKA .
Мой вопрос двоякий:
- Следует ли считать это ошибкой в TypeScript, учитывая, что один и тот же код в JS ведет себя по-разному?
- Есть ли веская причина, по которой
this
не может ссылаться наx1
в сгенерированном TypeScript JS? Или это ошибка самого JS?
es2018
или новее, он будет работать нормально. - person elderapo   schedule 26.03.2020