JS TypeScript 类:从基础到进阶的全面解析
JS TypeScript 类:从基础到进阶的全面解析
在 JavaScript 编程领域,TypeScript 凭借其强大的类型系统为开发者带来了更可靠的代码。其中,类(Class)是 TypeScript 中面向对象编程的重要组成部分。
类的基础定义
TypeScript 中的类与传统面向对象语言中的类概念相似。我们可以使用 class 关键字来定义一个类。例如:
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
introduce() {
console.log(`My name is ${this.name}, and I'm ${this.age} years old.`);
}
}
在上述代码中,我们定义了一个 Person 类。它有两个属性 name(字符串类型)和 age(数字类型),通过构造函数 constructor 来初始化这两个属性,还有一个 introduce 方法用于输出人物信息。
类的继承
继承是类的重要特性之一。通过继承,我们可以创建一个子类,继承父类的属性和方法。
class Student extends Person {
grade: number;
constructor(name: string, age: number, grade: number) {
super(name, age); // 调用父类构造函数
this.grade = grade;
}
study() {
console.log(`${this.name} is studying in grade ${this.grade}.`);
}
}
这里 Student 类继承自 Person 类。在子类的构造函数中,使用 super 关键字调用父类的构造函数来初始化从父类继承的属性,然后再初始化自己特有的 grade 属性。同时,子类还可以添加自己的方法,如 study 方法。
访问修饰符
TypeScript 提供了访问修饰符来控制类成员的访问权限。
public:默认修饰符,类的成员在类内外都可以访问。-
private:成员只能在类内部访问。class Car { private brand: string; public model: string; constructor(brand: string, model: string) { this.brand = brand; this.model = model; } showBrand() { console.log(`The brand is ${this.brand}.`); // 类内部可以访问 private 成员 } }
const myCar = new Car('Toyota', 'Corolla'); // console.log(myCar.brand); // 报错,无法在类外部访问 private 成员 console.log(myCar.model); // 可以访问 public 成员
- **`protected`**:成员在类内部和子类中可以访问。
```typescript
class Animal {
protected species: string;
constructor(species: string) {
this.species = species;
}
}
class Dog extends Animal {
constructor() {
super('Canine');
console.log(`The species is ${this.species}`); // 子类可以访问 protected 成员
}
}
类的静态成员
静态成员属于类本身,而不是类的实例。使用 static 关键字来定义。
class MathUtils {
static add(a: number, b: number): number {
return a + b;
}
}
const result = MathUtils.add(3, 5);
console.log(result);
这里 add 方法是 MathUtils 类的静态方法,通过类名直接调用。
抽象类
抽象类是一种不能直接实例化的类,它用于定义一些抽象方法(只有方法声明,没有方法实现),子类必须实现这些抽象方法。
abstract class Shape {
abstract calculateArea(): number;
}
class Circle extends Shape {
radius: number;
constructor(radius: number) {
super();
this.radius = radius;
}
calculateArea(): number {
return Math.PI * this.radius ** 2;
}
}
Shape 是抽象类,它定义了抽象方法 calculateArea。Circle 类继承自 Shape 类并实现了 calculateArea 方法。
TypeScript 的类为我们构建复杂的应用程序提供了强大的工具。通过合理运用类的定义、继承、访问修饰符、静态成员以及抽象类等特性,我们可以编写出结构清晰、易于维护且类型安全的代码。随着项目规模的增大,这些特性的优势将更加明显,帮助我们更好地组织代码逻辑,提高开发效率。

