对于应用了重定义 get/set 的 @装饰器 的属性, babel 无法在定义该属性的时候 初始化 它的值, 而用 tsc 编译后正常.
希望能修复这个问题, 或者允许用 tsc 取代 babel
-
Creator 版本: 3.4.1
-
重现方式:
const logged = (target, prop, desc?):any =>
{
const key = `_$_${prop}`
return {
get() { console.log(`@logged: get ${prop} (${this[key]})`); return this[key] },
set(v) { console.log(`@logged: set ${prop} to ${v}`); this[key] = v},
}
};
class Hello
{
@logged x = 123;
}
let h = new Hello();
console.log("x=" + h.x);
结果:
$ npx tsc index.ts --outFile index_tsc.js --experimentalDecorators --target es6 && node index_tsc.js
@logged: set x to 123 # tsc 正常初始化了 x
@logged: get x (123)
x=123
# ["@babel/plugin-proposal-decorators", {"version": "legacy"}],
$ npx babel --extensions .ts index.ts -o index.js && node index.js
@logged: get x (undefined)
x=undefined # babel 没有执行初始化语句 x = 123