返回

TypeScript 学习笔记:深度探索 TypeScript 类的世界

前端

TypeScript 学习之旅:第九站 - 类的世界

在 TypeScript 进阶之旅中,我们已经掌握了变量、数据类型、函数和数组的基本知识,接下来,我们将踏入面向对象编程(OOP)的领域,从今天开始,我们将深入学习 TypeScript 中的类。类是 TypeScript 面向对象编程的基础,也是一个重要的概念,它允许我们创建对象,并将对象组织成更易于管理和维护的结构。

一、严格属性初始化

在 TypeScript 中,我们可以在声明类属性时指定一个初始值,这称为严格属性初始化。当 --strictPropertyInitialization 参数开启时,class 的属性必须在构造函数中定义初始值。例如:

class Person {
  name: string; // 错误:属性 "name" 必须在构造函数中初始化
}

为了解决这个问题,我们可以在属性后面添加 ! 来关闭提示,如下所示:

class Person {
  name!: string; // 关闭严格属性初始化提示
}

不过,如果我们在构造函数中没有为属性指定初始值,TypeScript 仍然会给出错误提示,这是因为 TypeScript 希望我们在使用属性之前始终确保它具有定义的值。

二、构造函数重载

构造函数是类的一个特殊方法,它在创建对象时被调用。在 TypeScript 中,我们可以为类定义多个构造函数,这称为构造函数重载。例如:

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

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

在上面的例子中,我们为 Person 类定义了两个构造函数,第一个构造函数只接受一个参数 name,第二个构造函数接受两个参数 nameage。当我们创建 Person 类的对象时,我们可以根据需要选择使用哪个构造函数。

三、类属性

类属性是类的成员变量,它们可以在类中声明并初始化。类属性可以分为两类:实例属性和静态属性。实例属性是属于每个对象实例的属性,而静态属性是属于整个类的属性。

1. 实例属性

实例属性在构造函数中声明并初始化,它们只能在对象实例中访问。例如:

class Person {
  constructor(public name: string, public age: number) {}
}

const person1 = new Person('John', 30);
console.log(person1.name); // 输出:John

在上面的例子中,nameagePerson 类的实例属性。我们可以在构造函数中为它们指定初始值,并在对象实例中访问它们。

2. 静态属性

静态属性在类本身声明并初始化,它们可以被所有对象实例访问。例如:

class Person {
  static species = 'Homo sapiens';

  constructor(public name: string, public age: number) {}
}

console.log(Person.species); // 输出:Homo sapiens

在上面的例子中,speciesPerson 类的静态属性。我们可以在类本身声明并初始化它,并可以使用类名直接访问它。

四、对象实例

对象实例是类的具体实现,它包含了类属性的值。我们可以在 TypeScript 中使用 new 创建对象实例。例如:

class Person {
  constructor(public name: string, public age: number) {}
}

const person1 = new Person('John', 30);
const person2 = new Person('Mary', 25);

在上面的例子中,person1person2Person 类的两个对象实例。我们可以使用 new 关键字创建它们,并在括号中传递构造函数的参数。

结束语

在本文中,我们对 TypeScript 中的类进行了详细的学习,包括严格属性初始化、构造函数重载、类属性和对象实例等概念。通过这些知识,我们可以创建更强大的 TypeScript 程序,并更好地组织和管理我们的代码。