Javascript 为什么是';颜色';不存在于类型';车辆&x27;用打字机吗?
我在我的代码编辑器和typescriptlang.org之间练习TypeScript,在后者中,我收到一条错误消息,表示“车辆”类型上不存在“颜色”属性的Javascript 为什么是';颜色';不存在于类型';车辆&x27;用打字机吗?,javascript,typescript,Javascript,Typescript,我在我的代码编辑器和typescriptlang.org之间练习TypeScript,在后者中,我收到一条错误消息,表示“车辆”类型上不存在“颜色”属性的,以下代码: class Vehicle { // color: string; constructor(color: string) { this.color = color; } protected honk(): void { console.log('beep beep!'); } } c
,
以下代码:
class Vehicle {
// color: string;
constructor(color: string) {
this.color = color;
}
protected honk(): void {
console.log('beep beep!');
}
}
const vehicle = new Vehicle('orange');
console.log(vehicle.color);
class Car extends Vehicle {
private drive(): void {
console.log('chugga chugga');
}
startDrivingProcess(): void {
this.drive();
this.honk();
}
}
const car = new Car();
car.startDrivingProcess();
这似乎不对,我正在构造函数()中定义该属性。它似乎只有在我取消注释color:string时才起作用代码>
它在VS代码中工作,但我在typescriptlang.org中得到一个错误,但这不重要,因为这是一个JavaScript规则。我有两种方法来定义颜色属性,其中一种是通过constructor()
函数
class Vehicle {
color: string;
constructor(color: string) {
this.color = color;
}
protected honk(): void {
console.log('beep beep!');
}
}
// const vehicle = new Vehicle('orange');
// console.log(vehicle.color);
// class Car extends Vehicle {
// private drive(): void {
// console.log('chugga chugga');
// }
// startDrivingProcess(): void {
// this.drive();
// this.honk();
// }
// }
// const car = new Car();
// car.startDrivingProcess();
TypeScript是静态键入的。。。这意味着编译器必须在编译时了解有关代码的所有信息。对象/类不能在运行时动态更改自身
JavaScript是动态类型的。。。这意味着对象/类的形状可以在运行时的任何给定时刻更改
下面是一个例子:
class-Foo{
建造师(姓名){
this.name=name
}
}
在上面的类中,您将动态地为类型为Foo
的对象分配一个名为name
的字段
如果希望typescript在编译时注意到这一点,则需要指定一个属性
class-Foo{
只读名称:string//现在TS在编译时知道该字段
建造师(姓名){
this.name=name
}
}
“这似乎不对,我正在构造函数()中定义该属性”,但您并没有声明您的类实际上应该具有这样的属性。TS怎么知道这是不是你真正想要的?假设您实际将color:string
声明为类属性,然后在构造函数中执行this.color=“red”
。TS不应该告诉你这是错的吗?@VLAZ,好吧,这是有道理的,我想知道为什么在VS代码内部,TypeScript并没有抱怨。不管怎样,谢谢你的回答。。也许您需要在VSCode中配置一些东西。我不确定我是否做了什么特别的事情来让它识别错误。