建構函式

在這個例子中,我們使用 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