首页 > 解决方案 > Typescript 类属性初始化顺序

问题描述

假设我有一门课,例如:

class MyClass {
   private readonly prop1 = "prop1"
   private readonly prop2: string

   constructor(
     prop2 = "defaultProp2",
     private readonly prop3 = "defaultProp3"
   ) {
     this.prop2 = prop2
   }

   ...
}

变量初始化顺序是什么?

标签: typescript

解决方案


如果您编译到,ES5您可以看到在代码被向下编译时初始化的顺序(并且在使用本机类时顺序是一致的)。

var MyClass = /** @class */ (function () {
    function MyClass(prop2, prop3) {
        if (prop2 === void 0) { prop2 = "defaultProp2"; }
        if (prop3 === void 0) { prop3 = "defaultProp3"; }
        this.prop3 = prop3;
        this.prop1 = "prop1";
        this.prop2 = prop2;
    }
    return MyClass;
}());

所以顺序是:

  1. 构造函数字段速记
  2. 属性初始化器
  3. 构造函数体。

推荐阅读