模块课程(1/2)
类和修饰符
TypeScript 使用强大的面向对象编程 (OOP) 功能扩展了标准 ES6 类,例如静态类型、访问修饰符和速记参数属性。
类和访问修饰符
在 TypeScript 中,您可以使用三个主要关键字控制类成员、属性和方法的可见性:
public(默认):可以从任何地方访问该成员。private:该成员只能在定义它的类中访问。protected:该成员可在类及其子类中访问(继承)。
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 提供了一种简写语法来直接在构造函数中声明和初始化类成员。通过在构造函数参数前添加访问修饰符,可以自动创建并分配该属性:
// This syntax does exactly the same as the previous example!
class Animal {
constructor(
public name: string,
private age: number,
) {}
}实现接口
类可以使用 implements 关键字实现一个或多个接口。这通过定义所有必需的方法和属性来确保类遵守特定的约定:
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() 函数调用基类构造函数:
class Person {
constructor(public name: string) {}
}
class Student extends Person {
constructor(
name: string,
public grade: number,
) {
super(name); // Calls the Person constructor
}
}自己尝试一下
练习 1:汽车类别和私有修改器
声明一个名为 Car 的类。它必须具有在构造函数中定义的只读模型属性(字符串)、初始化为 0 的私有里程属性(数字)、以英里为单位递增里程的公共方法drive(miles:number):void,以及返回里程的getter 或方法getMileage():number。
显示提示
使用私人里程:数量=0;使变量私有,并将 constructor(public readonly model: string) {} 作为简写。
3 次尝试后可用的解决方案
练习 2:Shape 接口和 Circle 类
通过实现实现 Shape 接口的 Circle 类来完成代码。该类必须具有通过构造函数设置的只读 radius 属性(数字),并实现 getArea(): number (返回 Math.PI * radius * radius)。
显示提示
使用 Circle 类上的实现 Shape 并定义 getArea(): number 方法。
3 次尝试后可用的解决方案
练习 3:抽象车辆类和摩托车子类
声明一个名为 Motorcycle 的类,该类扩展了抽象类 Vehicle。它必须实现 start() 方法以返回字符串“Motorcycle”,后跟 make (this.make) 和“started”。
显示提示
使用 Motorcycle 类扩展 Vehicle 并实现返回正确字符串的 start(): string 方法。
3 次尝试后可用的解决方案
练习 4:参数属性和继承
创建一个名为 Employee 的类,该类使用构造函数简写定义只读属性 id(数字)和公共属性名称(字符串)。然后,创建一个继承 Employee 的类 Developer,并通过构造函数添加一个公共属性部门(字符串)。
显示提示
在 Developer 构造函数中使用 super(id, name) 并使用公共部门通过构造函数定义属性。
3 次尝试后可用的解决方案