📜  TypeScript-类(1)

📅  最后修改于: 2023-12-03 15:05:39.979000             🧑  作者: Mango

TypeScript-类

TypeScript 是一种静态类型检查的 JavaScript 超集,它为开发者提供了强大的工具来增强 JavaScript 的开发能力,其中包括了类的特性。TypeScript 的类是基于 ES6 类的扩展,并且为其添加了很多有用的特性。

创建一个类

我们可以使用 class 关键字来创建一个类。定义类时,我们可以指定类名以及使用花括号包含类的内容。

class Animal {
  name: string;

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

  sayName() {
    console.log(`My name is ${this.name}`);
  }
}

上面的代码定义了一个名为 Animal 的类,并定义了一个名为 sayName 的方法。这个方法用来输出动物的名字。constructor 方法用来初始化一个实例对象的实例变量,这里我们把名字作为参数传入,并把它保存在实例变量 name 中。

继承

TypeScript 支持面向对象编程中的继承。我们可以用 extends 关键字来继承一个现有的类,并添加或修改其中的方法或属性。

class Dog extends Animal {
  bark() {
    console.log("Woof! Woof!");
  }
}

上面的代码定义了一个名为 Dog 的类,它继承自 Animal 类。Dog 类添加了一个名为 bark 的方法,用来输出“Woof! Woof!”的叫声。

访问修饰符

TypeScript 提供了多种访问修饰符,用来控制类中的成员的可访问性。这些访问修饰符包括 publicprivateprotected

  • public:默认的访问修饰符,可以被任意对象访问。
  • private:只能在类内部访问。
  • protected:可以被类及其子类访问。
class Person {
  public name: string;
  private age: number;
  protected gender: string;

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

  sayName() {
    console.log(`My name is ${this.name}`);
  }

  sayAge() {
    console.log(`I am ${this.age} years old`);
  }
}

class Girl extends Person {
  constructor(name: string, age: number) {
    super(name, age, "Female");
  }

  sayGender() {
    console.log(`My gender is ${this.gender}`);
  }
}

上面的代码定义了一个名为 Person 的类,其中包含了三个实例变量:nameagegendername 的访问修饰符为 public,可以被任意对象访问;age 的访问修饰符为 private,只能在类内部访问;gender 的访问修饰符为 protected,可以被类及其子类访问。还定义了两个方法:sayNamesayAge,用来输出名字和年龄。

Girl 类继承自 Person 类,并覆盖了 gender 的值。它还定义了一个 sayGender 方法,用来输出性别。

只读属性

TypeScript 中的只读属性用来表示一个属性只能在构造函数中被赋值一次。我们可以通过在变量名之前加上 readonly 关键字来定义一个只读属性。

class Person {
  readonly id: number;
  name: string;

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

上面的代码定义了一个名为 Person 的类,其中包含了一个只读属性 id 和一个实例变量 nameid 只能在构造函数中被赋值一次,任何其他情况下都不能被修改。

静态属性

TypeScript 中的静态属性用来表示一个类的属性,而不是它的实例的属性。我们可以通过在变量名之前加上 static 关键字来定义一个静态属性。

class Person {
  static count: number = 0;

  constructor() {
    Person.count++;
  }

  static getCount() {
    return Person.count;
  }
}

上面的代码定义了一个名为 Person 的类,其中包含了一个静态属性 count 和一个构造函数。count 用来记录类被实例化的次数,每当一个新的实例被创建时,它的值就会增加。getCount 方法用来返回 count 的值。

结论

TypeScript 的类提供了很多有用的特性,包括继承、访问修饰符、只读属性和静态属性等。这些特性让我们可以更加方便地进行面向对象编程,并增强了 JavaScript 的开发能力。