TypeScript类

栏目: typescript 发布时间:2024-11-01

typescript中,类(Classes)是一种用于创建对象的模板或蓝图。它们提供了一种封装数据(属性)和行为(方法)的方式,使得代码更加模块化和可重用。TypeScript扩展了JavaScript的类系统,并添加了一些有用的特性,如类型注解、访问修饰符和抽象类等。

1. 基本类的定义

在TypeScript中,你可以使用class关键字来定义一个类。类可以包含属性(字段)和方法(函数)。

class Greeter {
  greeting: string;

  constructor(message: string) {
    this.greeting = message;
  }

  greet() {
    return "Hello, " + this.greeting;
  }
}

在这个例子中,Greeter类有一个属性greeting和一个方法greetconstructor是一个特殊的方法,用于在创建对象时初始化属性。

2. 创建类的实例

要使用类,你需要创建它的一个实例(对象)。这可以通过使用new关键字来完成。

let greeter = new Greeter("world");
console.log(greeter.greet()); // 输出: Hello, world

3. 访问修饰符

TypeScript支持三种访问修饰符:public(默认)、privateprotected

  • public:属性或方法是公开的,可以在任何地方访问。
  • private:属性或方法是私有的,只能在类内部访问。
  • protected:属性或方法是受保护的,只能在类内部或子类中访问。
class Animal {
  private name: string;

  constructor(theName: string) { this.name = theName; }

  move(distanceInMeters: number = 0) {
    console.log(`${this.name} moved ${distanceInMeters}m.`);
  }

  protected getName(): string {
    return this.name;
  }
}

在这个例子中,name属性是私有的,只能在Animal类内部访问。move方法是公开的,可以在任何地方调用。getName方法是受保护的,只能在Animal类内部或子类中调用。

4. 继承

TypeScript支持类的继承,这意味着你可以创建一个类(子类),它继承另一个类(父类)的属性和方法。

class Dog extends Animal {
  constructor(name: string) { super(name); }

  bark() {
    console.log(`${this.getName()} says Woof!`);
  }
}

在这个例子中,Dog类继承自Animal类。Dog类有一个bark方法,它调用了受保护的getName方法来获取Dog对象的名称。

5. 静态属性和方法

静态属性和方法属于类本身,而不是类的实例。它们通过类名而不是实例来访问。

class MathHelper {
  static add(a: number, b: number): number {
    return a + b;
  }
}

console.log(MathHelper.add(3, 4)); // 输出: 7

在这个例子中,MathHelper类有一个静态方法add,它可以直接通过MathHelper类名来调用。

6. 抽象类和方法

抽象类和方法在TypeScript中用于定义那些不应该被实例化的类,或者那些包含应该在子类中实现的方法的类。

abstract class Animal {
  abstract makeSound(): void;

  move(): void {
    console.log('roaming the earth...');
  }
}

class Dog extends Animal {
  makeSound() {
    console.log('Woof! Woof!');
  }
}

在这个例子中,Animal是一个抽象类,它有一个抽象方法makeSoundDog类继承自Animal类,并实现了makeSound方法。

7. 类的修饰符

TypeScript还支持类的修饰符,如readonly(只读属性)和static readonly(静态只读属性)。

class Grid {
  static readonly Origin = { x: 0, y: 0 };
  readonly size: number;

  constructor(size: number) {
    this.size = size;
  }
}

console.log(Grid.Origin.x); // 输出: 0
let myGrid = new Grid(10);
// myGrid.size = 20; // 错误: 'size' 是只读属性

在这个例子中,Grid类有一个静态只读属性Origin和一个只读实例属性size

类是TypeScript中一个非常重要的特性,它允许你创建结构化、可重用和可扩展的代码。通过定义类,你可以封装数据和行为,并通过继承和多态来实现代码的复用和灵活性。

本文地址:https://www.tides.cn/p_typescript-class