为什么我不能动态创建属性?

我是打字稿的新手,只是一个问题。我们知道我们可以在 javascript 中动态定义一个属性:


class Rectangle {

  constructor(height, width) {

    this.height = height;

    this.width = width;

  }

}

但是在使用 typescript 时我们不能做同样的事情:


class Rectangle {

  constructor(height:number, width:number) {

    this.height = height;   //error 

    this.width = width;     //error 

  }

}

我知道如果pubic在构造函数中添加访问标识符,例如参数前缀:


 ...

 constructor(public height:number, public width:number) {...}  //which create declaration automatically

会解决这个问题,但我只是想知道,那个打字稿不是 javascript 的超集吗?所以打字稿也应该支持所有有效的 javascript 语法?


至尊宝的传说
浏览 148回答 3
3回答

MMTTMM

它是 JavaScript 的严格语法超集,并为语言添加了可选的静态类型另一件需要注意的是,像非强类型的特性或类似的东西在 TypeScript 中不起作用,这种现象与它类似。

侃侃无极

以下是TS解释的流程。所有属性、方法都被初始化。然后在实例化过程中,调用构造函数并使用默认值设置上述属性。在您的代码中:class Rectangle {  constructor(height:number, width:number) {    this.height = height;   //error     this.width = width;     //error   }}没有提到任何属性,因此您会收到错误消息

元芳怎么了

您可以这样做,但是您当然会与该语言的类型检查功能作斗争。class Rectangle {  constructor(height:number, width:number) {    (this as any).height = height;    (this as any).width = width;  }}const rt = new Rectangle(100, 200);console.log((rt as any).width);也就是说,如果您转换为 any,您可以像在纯 JavaScript 中那样做任何事情。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript