跳转到主要内容
模块 4 · 第 1 课(共 2)课程中的7/14~15 min
模块课程(1/2)

类和修饰符

TypeScript 使用强大的面向对象编程 (OOP) 功能扩展了标准 ES6 类,例如静态类型、访问修饰符和速记参数属性。

类和访问修饰符

在 TypeScript 中,您可以使用三个主要关键字控制类成员、属性和方法的可见性:

  • public(默认):可以从任何地方访问该成员。
  • private:该成员只能在定义它的类中访问。
  • protected:该成员可在类及其子类中访问(继承)。
TS
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;
  }
}

参数属性

TypeScript 提供了一种简写语法来直接在构造函数中声明和初始化类成员。通过在构造函数参数前添加访问修饰符,可以自动创建并分配该属性:

TS
// This syntax does exactly the same as the previous example!
class Animal {
  constructor(
    public name: string,
    private age: number,
  ) {}
}

实现接口

类可以使用 implements 关键字实现一个或多个接口。这通过定义所有必需的方法和属性来确保类遵守特定的约定:

TS
interface Flyable {
  fly(altitude: number): void;
}

class Bird implements Flyable {
  constructor(public name: string) {}

  fly(altitude: number): void {
    console.log(`${this.name} is flying at ${altitude} meters.`);
  }
}

继承和 super

TypeScript 完全支持类继承。一个类可以使用 extends 关键字扩展另一个类。如果子类定义了构造函数,则在访问 this 之前,它必须使用 super() 函数调用基类构造函数:

TS
class Person {
  constructor(public name: string) {}
}

class Student extends Person {
  constructor(
    name: string,
    public grade: number,
  ) {
    super(name); // Calls the Person constructor
  }
}

自己尝试一下

练习 1:汽车类别和私有修改器

锻炼#ts.m4.l1.e1
尝试:0加载中...

声明一个名为 Car 的类。它必须具有在构造函数中定义的只读模型属性(字符串)、初始化为 0 的私有里程属性(数字)、以英里为单位递增里程的公共方法drive(miles:number):void,以及返回里程的getter 或方法getMileage():number。

正在加载编辑器...
显示提示

使用私人里程:数量=0;使变量私有,并将 constructor(public readonly model: string) {} 作为简写。

3 次尝试后可用的解决方案

练习 2:Shape 接口和 Circle 类

锻炼#ts.m4.l1.e2
尝试:0加载中...

通过实现实现 Shape 接口的 Circle 类来完成代码。该类必须具有通过构造函数设置的只读 radius 属性(数字),并实现 getArea(): number (返回 Math.PI * radius * radius)。

正在加载编辑器...
显示提示

使用 Circle 类上的实现 Shape 并定义 getArea(): number 方法。

3 次尝试后可用的解决方案

练习 3:抽象车辆类和摩托车子类

锻炼#ts.m4.l1.e3
尝试:0加载中...

声明一个名为 Motorcycle 的类,该类扩展了抽象类 Vehicle。它必须实现 start() 方法以返回字符串“Motorcycle”,后跟 make (this.make) 和“started”。

正在加载编辑器...
显示提示

使用 Motorcycle 类扩展 Vehicle 并实现返回正确字符串的 start(): string 方法。

3 次尝试后可用的解决方案

练习 4:参数属性和继承

锻炼#ts.m4.l1.e4
尝试:0加载中...

创建一个名为 Employee 的类,该类使用构造函数简写定义只读属性 id(数字)和公共属性名称(字符串)。然后,创建一个继承 Employee 的类 Developer,并通过构造函数添加一个公共属性部门(字符串)。

正在加载编辑器...
显示提示

在 Developer 构造函数中使用 super(id, name) 并使用公共部门通过构造函数定义属性。

3 次尝试后可用的解决方案