一、基本概念
TypeScript 類是基于 ES6 類的語法擴展,增加了類型注解和訪問修飾符等特性,提供了更強大的面向對象編程能力。
二、基本語法
class Person {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}greet() {return `Hello, my name is ${this.name}`;}
}
三、類的主要特性
1. 訪問修飾符
-
public?(默認):成員在任何地方都可訪問
-
private:只能在類內部訪問
-
protected:可在類及其子類中訪問
class Animal {public name: string;private secret: string;protected age: number;
}
2. 只讀屬性
class Person {readonly birthDate: Date;
}
3. 參數屬性
簡化屬性聲明和賦值的語法:
class Person {constructor(public name: string, private age: number) {}// 等同于聲明name和age并在構造函數中賦值
}
4. 存取器 (getters/setters)
class Employee {private _salary: number;get salary(): number {return this._salary;}set salary(newSalary: number) {if (newSalary >= 0) {this._salary = newSalary;}}
}
5. 靜態成員
class Grid {static origin = { x: 0, y: 0 };static calculateDistance(point: {x: number, y: number}) {// ...}
}
6. 抽象類
abstract class Animal {abstract makeSound(): void; // 必須在派生類中實現move(): void {console.log("moving...");}
}
7. 類與接口
類可以實現接口:
interface ClockInterface {currentTime: Date;setTime(d: Date): void;
}class Clock implements ClockInterface {currentTime: Date = new Date();setTime(d: Date) {this.currentTime = d;}
}
四、繼承
class Animal {move(distance: number = 0) {console.log(`Moved ${distance}m`);}
}class Dog extends Animal {bark() {console.log("Woof! Woof!");}
}
五、方法重寫
class Animal {move(distance: number = 0) {console.log(`Moved ${distance}m`);}
}class Snake extends Animal {move(distance: number = 5) {console.log("Slithering...");super.move(distance);}
}
六、高級特性
1. 類類型
類既可以作為值使用,也可以作為類型使用:
class Greeter {greeting: string;constructor(message: string) {this.greeting = message;}
}let greeter: Greeter = new Greeter("world");
2. 構造函數類型
class Point {x: number;y: number;
}let PointConstructor: typeof Point = Point;
let point: Point = new PointConstructor();
3. 裝飾器 (實驗性特性)
@sealed
class Greeter {greeting: string;constructor(message: string) {this.greeting = message;}@enumerable(false)greet() {return "Hello, " + this.greeting;}
}
七、與ES6類的區別
-
TypeScript類有類型注解
-
支持訪問修飾符(public/private/protected)
-
支持抽象類和抽象方法
-
支持參數屬性
-
支持接口實現檢查
八、最佳實踐
-
優先使用private/protected限制成員訪問
-
考慮使用抽象類定義通用行為
-
合理使用接口來定義類的公共契約
-
對于簡單的數據對象,考慮使用接口而不是類
TypeScript的類提供了強大的面向對象編程能力,同時保持了JavaScript的靈活性,是構建大型應用的理想選擇。