TypeScript 引入了类的概念,允许使用面向对象的编程范式。类是对象的模板或蓝图,它定义了一组属性和方法,这些属性和方法被对象所共享。在 TypeScript 中,类提供了更结构化、可维护且可重用的代码方式。
TypeScript 类简介
- 属性:类中的变量称为属性(也称为字段或成员变量)。
- 方法:类中的函数称为方法(也称为成员函数)。
- 构造函数:一个特殊的方法,用于初始化新创建的对象。
- 继承:一个类可以从另一个类继承属性和方法。
- 访问修饰符:TypeScript 支持
public
、private
和protected
访问修饰符,用于控制成员的可访问性。 - 抽象类:不能被实例化的类,但可以被其他类继承。
- 静态属性和方法:属于类本身,而不是类的实例的属性或方法。
使用方法
- 定义类
使用 class
关键字定义类,并在大括号中定义属性和方法。
class Animal {
public name: string;
constructor(name: string) {
this.name = name;
}
public speak(): void {
console.log(`${this.name} makes a noise.`);
}
}
- 实例化类
使用 new
关键字创建类的实例(即对象)。
let dog = new Animal('Buddy');
dog.speak(); // 输出: Buddy makes a noise.
- 访问修饰符
使用 public
、private
和 protected
修饰符控制属性和方法的访问权限。
class Person {
private _age: number; // 私有属性
constructor(age: number) {
this._age = age;
}
public getAge(): number { // 公有方法,用于访问私有属性
return this._age;
}
}
let person = new Person(30);
// person._age; // 错误:私有属性只能在类内部访问
console.log(person.getAge()); // 输出: 30
- 继承
使用 extends
关键字让一个类继承另一个类。
class Dog extends Animal {
constructor(name: string) {
super(name); // 调用父类的构造函数
}
public bark(): void {
console.log(`${this.name} says woof!`);
}
}
let d = new Dog('Spike');
d.speak(); // 输出: Spike makes a noise.
d.bark(); // 输出: Spike says woof!
- 抽象类
使用 abstract
关键字定义抽象类,它不能被实例化,但可以被其他类继承。
abstract class AnimalBase {
public abstract speak(): void; // 抽象方法,必须在子类中被实现
}
class DogBase extends AnimalBase {
public speak(): void {
console.log('The dog speaks!');
}
}
// new AnimalBase(); // 错误:抽象类不能被实例化
let dogBase = new DogBase();
dogBase.speak(); // 输出: The dog speaks!
- 静态属性和方法
在类上定义,而不是在类的实例上定义。
class MathUtils {
static PI = 3.14159; // 静态属性
static calculateArea(radius: number): number { // 静态方法
return MathUtils.PI * radius * radius;
}
}
console.log(MathUtils.PI); // 输出: 3.14159
console.log(MathUtils.calculateArea(5)); // 输出: 78.53975