如何使用 TypeScript 类(附简单示例)

TypeScript 为 JavaScript 带来了强大的功能,包括类的概念,它允许面向对象编程。类提供了创建对象、封装数据和定义行为的蓝图。本指南将通过简单的示例向您介绍 TypeScript 类的基础知识。

什么是课程?

类是创建具有预定义属性和方法的对象的蓝图。它有助于组织代码、提高可重用性和创建可扩展的应用程序。TypeScript 中的类与其他面向对象编程语言中的类的工作方式类似。

定义基础类

要在 TypeScript 中定义一个类,请使用 class 关键字,后跟类名和一组包含属性和方法的花括号。

基础类示例

下面是一个具有属性和方法的简单 Person 类的示例:

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  greet(): void {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const person1 = new Person("Alice", 30);
person1.greet(); // Output: Hello, my name is Alice and I am 30 years old.

在此示例中,Person 类有两个属性:nameage。构造函数方法初始化这些属性,greet 方法输出问候消息。

访问修饰符

TypeScript 提供了三个访问修饰符来控制类成员的可见性:

  • public:成员可以从任何地方访问(默认)。
  • private:成员只能在类内访问。
  • protected:成员可在类及其子类内访问。

使用访问修饰符

以下是如何在 TypeScript 类中使用访问修饰符的方法:

class Animal {
  public name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  public getAge(): number {
    return this.age;
  }
}

const dog = new Animal("Buddy", 5);
console.log(dog.name); // Output: Buddy
console.log(dog.getAge()); // Output: 5
// console.log(dog.age); // Error: 'age' is private and only accessible within class 'Animal'.

在这个例子中,name 是一个公共属性,可以从类外部访问,而age 是一个私有属性,只能在类内部访问。

TypeScript 中的继承

TypeScript 支持继承,允许一个类从另一个类继承属性和方法。这有助于重用代码并创建类的层次结构。

继承示例

下面是从基类 Animal 继承的类 Dog 的示例:

class Animal {
  constructor(public name: string) {}

  makeSound(): void {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name); // Call the constructor of the base class
  }

  makeSound(): void {
    console.log(`${this.name} barks.`);
  }
}

const dog = new Dog("Buddy");
dog.makeSound(); // Output: Buddy barks.

在此示例中,Dog 类扩展了 Animal 类并覆盖了 makeSound 方法。

Getters 和 Setters

TypeScript 允许您为属性定义 getter 和 setter,从而提供对类成员的受控访问。

Getters 和 Setters 示例

class Person {
  private _name: string;

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

  get name(): string {
    return this._name;
  }

  set name(newName: string) {
    if (newName) {
      this._name = newName;
    } else {
      console.log("Name cannot be empty.");
    }
  }
}

const person = new Person("Alice");
console.log(person.name); // Output: Alice
person.name = "Bob";
console.log(person.name); // Output: Bob

在此示例中,使用 getter 和 setter 方法访问和修改 name 属性。

结论

TypeScript 类是一种以简洁高效的方式编写面向对象代码的强大方法。它们提供了一种结构化的方式来定义属性、方法、访问修饰符、继承等。通过了解如何使用 TypeScript 类,您可以为应用程序编写更强大且更易于维护的代码。