TypeScript 是一种由微软开发的 JavaScript 超集,它给 JavaScript 带来了类型检查和更好的面向对象编程能力。在 TypeScript 中,class 是一种重要的语言特性,它能让我们更方便地使用面向对象的编程方式。本文将介绍 TypeScript 中 class 的一些用法,包括类的定义、继承、修饰符、抽象类和接口等。
类的定义
在 TypeScript 中,我们可以使用 class 关键字来定义一个类。类的定义包括类名、类的属性和方法。
class Animal { name: string; constructor(name: string) { this.name = name; } sayHello() { console.log(`Hello, I'm ${this.name}.`); } }
上面的代码定义了一个 Animal 类,它有一个 name 属性和一个 sayHello 方法。在构造函数中,我们通过 this 关键字来初始化 name 属性。在 sayHello 方法中,我们使用模板字符串来输出一句问候语。注意,类的方法可以直接访问类的属性。
继承
在 TypeScript 中,我们可以使用 extends 关键字来实现类的继承。子类继承了父类的属性和方法,并可以在此基础上添加自己的属性和方法。
class Cat extends Animal { constructor(name: string) { super(name); } meow() { console.log(`${this.name} meows.`); } }
上面的代码定义了一个 Cat 类,它继承了 Animal 类。在 Cat 类的构造函数中,我们调用了父类的构造函数,并传入了 name 参数。在 meow 方法中,我们输出了一句猫叫声。注意,子类的构造函数必须调用父类的构造函数,否则会出现编译错误。
修饰符
在 TypeScript 中,我们可以使用修饰符来控制类的属性和方法的访问权限。常用的修饰符包括 public、private 和 protected。
- 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; } sayHello() { console.log(`Hello, I'm ${this.name}.`); } private sayAge() { console.log(`I'm ${this.age} years old.`); } protected sayGender() { console.log(`My gender is ${this.gender}.`); } } class Student extends Person { constructor(name: string, age: number, gender: string) { super(name, age, gender); } introduce() { console.log(`My name is ${this.name}.`); this.sayAge(); this.sayGender(); } }
上面的代码定义了一个 Person 类和一个 Student 类,其中 Person 类有一个 public 的 name 属性、一个 private 的 age 属性和一个 protected 的 gender 属性。Person 类有一个 public 的 sayHello 方法、一个 private 的 sayAge 方法和一个 protected 的 sayGender 方法。Student 类继承了 Person 类,并在此基础上添加了一个 introduce 方法,该方法可以访问父类的 protected 属性和方法。
抽象类
在 TypeScript 中,我们可以使用 abstract 关键字定义抽象类。抽象类不能被实例化,只能被继承。抽象类可以包含抽象方法,抽象方法没有实现,必须在子类中被实现。
abstract class Shape { abstract getArea(): number; } class Circle extends Shape { radius: number; constructor(radius: number) { super(); this.radius = radius; } getArea() { return Math.PI * this.radius * this.radius; } } class Rectangle extends Shape { width: number; height: number; constructor(width: number, height: number) { super(); this.width = width; this.height = height; } getArea() { return this.width * this.height; } }
上面的代码定义了一个 Shape 抽象类和两个实现类 Circle 和 Rectangle。Shape 类有一个抽象方法 getArea,该方法没有实现。Circle 类和 Rectangle 类继承了 Shape 类,并实现了 getArea 方法。
接口
在 TypeScript 中,我们可以使用接口来描述对象的形状。接口可以包含属性、方法、索引签名和函数签名等成员。
interface Person { name: string; age: number; sayHello(): void; } class Student implements Person { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } sayHello() { console.log(`Hello, I'm ${this.name}.`); } }
上面的代码定义了一个 Person 接口和一个实现类 Student。Person 接口包含 name 属性、age 属性和 sayHello 方法。Student 类实现了 Person 接口,并提供了 name 属性、age 属性和 sayHello 方法的实现。
总结
本文介绍了 TypeScript 中 class 的一些用法,包括类的定义、继承、修饰符、抽象类和接口等。通过学习这些内容,我们可以更好地使用 TypeScript 进行面向对象编程。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658eb191eb4cecbf2d48a9ea