Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 打字错误`“get”语法和“defineProperty”之间的差异;让我们开始吧`_Javascript_Typescript_This_Getter_Defineproperty - Fatal编程技术网

Javascript 打字错误`“get”语法和“defineProperty”之间的差异;让我们开始吧`

Javascript 打字错误`“get”语法和“defineProperty”之间的差异;让我们开始吧`,javascript,typescript,this,getter,defineproperty,Javascript,Typescript,This,Getter,Defineproperty,我有这个密码: var x={ x1:5, x2:7 }; 变量y={ …x, _原始x2:x.x2, 获取x2(){ console.log(this.x1); 返回9; } }; 控制台日志(y.x2); 变量z={ …x, _原始x2:x.x2 }; Object.defineProperty(z,'x2'{ get:function(){ console.log(this.x1); 返回9; } }) 控制台日志(z.x2) 考虑到JS中相同的代码具有不同的行为,这是否被视为TypeS

我有这个密码:

var x={
x1:5,
x2:7
};
变量y={
…x,
_原始x2:x.x2,
获取x2(){
console.log(this.x1);
返回9;
}
};
控制台日志(y.x2);
变量z={
…x,
_原始x2:x.x2
};
Object.defineProperty(z,'x2'{
get:function(){
console.log(this.x1);
返回9;
}
})
控制台日志(z.x2)
考虑到JS中相同的代码具有不同的行为,这是否被视为TypeScript中的错误

是的,这看起来确实像是一个与Typescript对象扩展语法的透明化相关的bug。编译后的TS与JS做的事情不同

在第一个示例中,使用属性
x2
定义一个
y
对象,它是一个getter:

var y = {
  ...x, 
  _originalX2:x.x2, 
  get x2(){
因此,稍后引用
y.x2
将导致调用getter。但在编译的Typescript中,我们得到:

varx={x1:5,x2:7};
var y=Object.assign(
赋值({},x),
{
_原始x2:x.x2,
获取x2(){
console.log(this.x1);
}
}

);这似乎确实是typescript编译器中的一个bug。值得一提的是:如果您将typescript目标设置为
es2018
或更高版本,它工作正常。是的,请检查此typescript中的编译代码,并发现此@的现有TS错误。