程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了TypeScript:使用扩展运算符添加到对象的 getter 返回未定义。函数工作正常大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决TypeScript:使用扩展运算符添加到对象的 getter 返回未定义。函数工作正常?

开发过程中遇到TypeScript:使用扩展运算符添加到对象的 getter 返回未定义。函数工作正常的问题如何解决?下面主要结合日常开发的经验,给出你关于TypeScript:使用扩展运算符添加到对象的 getter 返回未定义。函数工作正常的解决方法建议,希望对你解决TypeScript:使用扩展运算符添加到对象的 getter 返回未定义。函数工作正常有所启发或帮助;

我正在尝试向对象添加方法(我的用例:我从 API 获取 JsON 并希望向对象添加功能)。但是我的吸气剂失败了。这是 TypeScript Playground 上行为的简化示例:

let o = {
  a: 'a',}

let oo = {
  ...o,b: 'b',fa() { return this.a },fb() { return this.b },get ga(): String { return this.a },get gb(): String { return this.b },}

console.log(`oo.a = ${oo.a}`)
console.log(`oo.b = ${oo.b}`)
console.log(`oo.fa() = ${oo.fa()}`)
console.log(`oo.fb() = ${oo.fb()}`)
console.log(`oo.ga = ${oo.ga}`)
console.log(`oo.gb = ${oo.gb}`)

输出:

[LOG]: "oo.a = a" 
[LOG]: "oo.b = b" 
[LOG]: "oo.fa() = a" 
[LOG]: "oo.fb() = b" 
[LOG]: "oo.ga = undefined" 
[LOG]: "oo.gb = b" 

为什么 oo.ga 未定义?

另外,我在 getter 上指定返回类型,否则我会收到这些错误:

'ga' implicitly has return type 'any' because it does not have a return type
Annotation and is referenced directly or indirectly in one of its return Expressions.

也不知道那里发生了什么。

解决方法

这看起来像是 TypeScript 中的一个错误。您的代码(在 JavaScript 中可以正常工作)转译为:

let oo = Object.assign(Object.assign({},o),{
  b: 'b',fa() {
    return this.a;
  },fb() {
    return this.b;
  },get ga() {
    return this.a;
  },get gb() {
    return this.b;
  }
});

问题在于 Object.assign:使用 Object.assign 将导致在作为第二个(或更高版本)参数的对象上调用getter。因此 .ga 属性 getter 在创建 oo 对象时被调用,而不是在您稍后访问该属性以对其进行记录时调用。

const obj = Object.assign({},{ get foo() { console.log('getter invoked'); } });

一种方法是将目标设置为 ES2018 或更高版本,这将保留其余语法,而不会(不准确)转译为 Object.assign

另一种选择是使用 getter 手动分配给对象:

let oo = Object.assign({
    b: 'b',fa() { return this.a },fb() { return this.b },get ga(): String { return this.a },get gb(): String { return this.b },},o);

大佬总结

以上是大佬教程为你收集整理的TypeScript:使用扩展运算符添加到对象的 getter 返回未定义。函数工作正常全部内容,希望文章能够帮你解决TypeScript:使用扩展运算符添加到对象的 getter 返回未定义。函数工作正常所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:getter