构造函数

在这个例子中,我们使用 constructor 在基类中声明公共属性 position 和受保护属性 speed。这些属性称为参数属性。他们让我们在一个地方声明一个构造函数参数和一个成员。

TypeScript 中最好的事情之一是将构造函数参数自动分配给相关属性。

class Car {
    public position: number;        
    protected speed: number;

    constructor(position: number, speed: number) {
        this.position = position;
        this.speed = speed;
    }
    
    move() {
        this.position += this.speed;
    }        
}

所有这些代码都可以在一个构造函数中恢复:

class Car {
    constructor(public position: number, protected speed: number) {}
    
    move() {
        this.position += this.speed;
    }        
}

它们都将从 TypeScript(设计时和编译时)转换为 JavaScript,结果相同,但编写的代码要少得多:

var Car = (function () {
    function Car(position, speed) {
        this.position = position;
        this.speed = speed;
    }
    Car.prototype.move = function () {
        this.position += this.speed;
    };
    return Car;
}());

派生类的构造函数必须使用 super() 调用基类构造函数。

class SelfDrivingCar extends Car {
    constructor(startAutoPilot: boolean) {
        super(0, 42);
        if (startAutoPilot) {
            this.move();
        }
    }
}

let car = new SelfDrivingCar(true);
console.log(car.position);  // access the public property position