我刚接触打字稿,只是一个问题。我们知道我们可以在javascript中动态定义一个属性,如下所示:
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
但是使用打字稿时我们不能做同样的事情:
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语法?
答案 0 :(得分:3)
这是JavaScript的严格语法超集,并为该语言添加了可选的静态类型
要注意的另一件事是,诸如非强类型功能或类似内容之类的功能在TypeScript中将不起作用,这种现象与之相似。
答案 1 :(得分:1)
以下是TS解释的流程。
在您的代码中:
class Rectangle {
constructor(height:number, width:number) {
this.height = height; //error
this.width = width; //error
}
}
没有提到任何属性,因此会出现错误
答案 2 :(得分:0)
您可以做到,但您当然会与该语言的类型检查功能作斗争。
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);
也就是说,如果您强制转换为任意一个,就可以像使用普通JavaScript一样执行所有操作。