为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

至尊宝的传说 2021-12-23 14:42:58
我是打字稿的新手,只是一个问题。我们知道我们可以在 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 语法?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

它是 JavaScript 的严格语法超集,并为语言添加了可选的静态类型

另一件需要注意的是,像非强类型的特性或类似的东西在 TypeScript 中不起作用,这种现象与它类似。


查看完整回答
反对 回复 2021-12-23
?
侃侃无极

TA贡献2051条经验 获得超10个赞

以下是TS解释的流程。

  1. 所有属性、方法都被初始化。

  2. 然后在实例化过程中,调用构造函数并使用默认值设置上述属性。

在您的代码中:

class Rectangle {

  constructor(height:number, width:number) {

    this.height = height;   //error 

    this.width = width;     //error 

  }

}

没有提到任何属性,因此您会收到错误消息


查看完整回答
反对 回复 2021-12-23
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您可以这样做,但是您当然会与该语言的类型检查功能作斗争。


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 中那样做任何事情。


查看完整回答
反对 回复 2021-12-23
  • 3 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信