javascript - 为什么要在类中声明变量,甚至在构造函数中将该变量赋值给 this

标签 javascript typescript

在下面的代码中,如您所见,我在 Test 类中声明了一个变量 constObj。并同时在构造函数中将constObj对象赋值给this

为什么我们需要再次声明变量,即使我们已经在构造函数中将它分配给 this

webstorm IDE 中,它抛出错误 doesn't have the property constObj,如果我这样做 this.constObj,如果未声明变量。但代码运行良好,没有问题。

正在声明该变量是必需的,即使我们将其分配给 this

const constObj = {
  a: function() {
    console.log("sivakumar");
  }
};

class Test {
  constObj: any; // Is this line mandatory? I mean declaring it???

  constructor() {
    Object.assign(this, {
      constObj
    });
  }

  callMethod() {
    this.constObj.a();
  }
}

new Test().callMethod();

如果我们不申报,请告知会发生什么情况。

最佳答案

Is declaring the variable is mandatory...

它不是一个变量,它是一个属性。

TypeScript 的答案:是的,它是强制性的,以便 TypeScript 知道 Test 具有该属性以进行静态类型检查。 (请注意,您所做的方式只是声明该属性的可能方式之一。但您确实需要声明它。)

JavaScript 的答案:不,这不是强制性的¹,因为 JavaScript 不进行静态类型检查。


¹(根据当前规范这是不可能的,但它是 soon will be 并且通常使用 Babel 等工具进行转译)

关于javascript - 为什么要在类中声明变量,甚至在构造函数中将该变量赋值给 this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54783144/

相关文章:

javascript - 使用 jQuery 检查链接是否仍然有效

javascript - onTimeUpdate 链接到进度条

javascript - 在 React 中设置状态

typescript - 如何使用 jest 测试 Apollo Server 订阅?

javascript - 使用 jQuery.load() 查询自定义帖子类型

typescript - 有没有一种更简洁的方法可以对嵌套数组中的所有元素调用类型转换函数?

reactjs - typescript react : generic-based callback event handler function as prop to component

javascript - 比较两个数组的值并相应地创建对象

javascript - React : Convert timestamps in list of objects from Node. js 服务器并保存到状态

javascript - Spec 没有期望 - Jasmine 测试回调函数