类的声明

在使用类之前,需要先声明类的结构,再基于此结构创建该类的一个或多个实例对象。

基本声明语法

TypeScript 使用 class 关键字来声明类,基本声明语法如下。

class 类名 {
    //属性
    属性名称1: 属性类型;
    属性名称2: 属性类型;
    ...
    //构造函数
    constructor(参数列表...) {
        //构造实例对象时的初始化代码
    }
    //方法
    方法名称1(参数列表...): 返回值类型 {
        //方法代码块
    }
    方法名称2(参数列表...): 返回值类型 {
        //方法代码块
    }
    ...
}

类的声明示例如下。

class Person {
    name: string;
    age: number;
    constructor(initName: string, initAge: number) {
        this.name = initName;
        this.age = initAge;
    }
    introduction(): void {
        console.log(`My name is ${this.name}, I'm ${this.age} years old.`)
    }
}

代码声明了一个 Person 类,它拥有一个 string 类型的 name 属性和一个 number 类型的 age 属性,并且拥有一个 introduction() 方法,用于输出简短的自我介绍。同时,类中指定了构造函数,它拥有 initNameinitAge 两个参数。当调用构造函数时,会将这两个参数值分别赋给新对象的 name 属性和 age 属性。

创建实例对象

类是对象的模板,并不是实际对象。只有实例化该类,才能产生以该类为模板的新对象。实例化时会调用类的构造函数来产生新对象。在 TypeScript 中,使用 new 关键字来实例化新的对象,语法如下。

let 对象名称 = new 类名(构造函数的参数...);

构造函数用于描述如何构造实例对象。当使用 “new类名(构造函数的参数…​)” 语句时,会调用该类的构造函数来实例化新对象。

以前面声明的 Person 类为例,Person 类拥有一个构造函数,该函数拥有两个参数(initNameinitAge)。在向构造函数传递具体参数值之后,构造函数会产生一个新的对象,并将这两个参数值分别赋给新对象的 name 属性和 age 属性,然后返回这个新的对象。Person 类实例化对象的示例代码如下。

let person1: Person = new Person("Rick", 24);
//以下代码输出My name is Rick, I'm 24 years old.
person1.introduction();

let person2: Person = new Person("Shark", 31);
//以下代码输出My name is Shark, I'm 31 years old.
person2.introduction();

一个类只支持一个构造函数。如果构造实例对象时不需要特殊处理,也可以不用编写构造函数,TypeScript 会自动生成一个无参数且函数体为空的构造函数,用于实例化该类。

例如,对于以下类,没有编写构造函数,但由于 TypeScript 会默认生成一个无参数构造函数,因此也可以用它实例化新对象。

class Animal {
    type: string;
}

let animal1: Animal = new Animal();
animal1.type = "primate"

声明类时,类的作用域不会提升到当前作用域的顶端,因此无法在类的声明语句出现之前就使用,否则会引起编译错误,示例代码如下。

//编译错误:类"Animal"用于其声明前。ts(2449)
let animal1: Animal = new Animal();

class Animal {
    type: string;
}