我是打字稿的新手,只是一个问题。我们知道我们可以在 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 中不起作用,这种现象与它类似。
侃侃无极
TA贡献2051条经验 获得超10个赞
以下是TS解释的流程。
所有属性、方法都被初始化。
然后在实例化过程中,调用构造函数并使用默认值设置上述属性。
在您的代码中:
class Rectangle {
constructor(height:number, width:number) {
this.height = height; //error
this.width = width; //error
}
}
没有提到任何属性,因此您会收到错误消息
元芳怎么了
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 中那样做任何事情。
添加回答
举报
0/150
提交
取消