Javascript 为什么是';颜色';不存在于类型';车辆&x27;用打字机吗?

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

我在我的代码编辑器和typescriptlang.org之间练习TypeScript,在后者中,我收到一条错误消息,表示“车辆”类型上不存在“颜色”属性的
以下代码:

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中配置一些东西。我不确定我是否做了什么特别的事情来让它识别错误。