为什么Typescript允许我在不指定必填字段的情况下创建对象?

时间:2019-06-21 19:44:12

标签: typescript

我创建了一个类,然后通过构造函数从该类中创建了对象的实例。对象已成功创建并输出到控制台,文件已编译为.js,但是:为什么我没有收到“类型'{}'缺少类型'车辆'的以下属性的错误:isSpecial,brand ,模型和另外2个。” ?在类描述中,这些字段不是可选的,但是尽管如此,我仍然能够创建一个对象而无需指出它们,没有错误。但是,当我创建这样的对象:“ const toyota:Vehicle = {}”时,会出现错误。通过构造函数-没有错误。为什么?

class Vehicle {
  isSpecial: boolean;
  wheels: number;
  brand: string;
   model: string;
   mileage: number;
   isUsed: boolean;
   constructor (wheels: number, mileage: number) {
     this.wheels = wheels;
     this.mileage = mileage;
   }
   drive(): void {
     this.mileage += 100;
   };
 }

 const toyota: Vehicle = new Vehicle(4, 200);

 console.log(toyota);

预期:错误“类型'{}'缺少类型'车辆'的以下属性:isSpecial,品牌,型号和另外2个。” 实际:没有错误,已创建对象

2 个答案:

答案 0 :(得分:2)

您必须打开--strictPropertyInitialization compiler option,然后会收到错误消息highlighting uninitialized properties

答案 1 :(得分:0)

  isSpecial: boolean;
  wheels: number;
  brand: string;
   model: string;
   mileage: number;
   isUsed: boolean;

这些不是声明它们是必需的。您声明的这些声明可供您使用。并非this中的所有实例变量都必须在constructor中声明,因此,打字稿不会在其中强制执行其声明。唯一需要做的就是将您作为constructor函数的参数放置的内容