TypeScript 类

注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。


TypeScript 类提供了创建具有预定义属性和方法的对象的蓝图。

这是一个简单的类的示例。您可以阅读本教程的其余部分以了解更多信息。

示例

// Define a class named 'Person'
class Person {
    name: string;
    age: number;

    // Constructor to initialize 'name' and 'age'
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    // Method to display a message
    greet(): void {
        console.log(`My name is ${this.name} and I am ${this.age} years old.`);
    }
}

// Create instances of the Person class
let person1 = new Person("Jack", 30);
let person2 = new Person("Tina", 33);

// Call greet() method
person1.greet();
person2.greet();

// Output
// My name is Jack and I am 30 years old.
// My name is Tina and I am 33 years old.

在这里,我们创建了一个带有构造函数的 Person 类来初始化 nameage,以及一个 greet() 方法来打印消息。然后,我们创建了两个对象并对每个对象调用了该方法。


不使用类创建对象

在 TypeScript 中,您可以灵活地直接创建对象,而无需使用正式的类定义。这可以通过使用对象字面量来实现。

让我们看下面的例子,

// Create an object 'person' with type annotation
let person: { 
  name: string; 
  age: number; 
  greet: () => void;
} = {
  name: "Jack",  
  age: 30,       
  greet() { 
    console.log(`My name is ${this.name} and I am ${this.age} years old.`);
  }
};

// Call the greet() method on the person object
person.greet();

输出

My name is Jack and I am 30 years old.

在上面的示例中,我们使用对象字面量直接创建了一个名为 person 的对象。

person 对象具有

  • 属性 - nameage,值分别为 "Jack"30
  • 方法 - greet(),它显示问候消息。

我们使用 . 运算符通过 person.greet() 调用了 person 上的 greet() 方法。

要了解有关对象字面量的更多信息,请访问 TypeScript 对象


TypeScript 类的特性

让我们回顾一下本教程开头处的代码,并详细探讨每个部分,以更深入地了解类在 TypeScript 中的工作原理。

// Define a class named 'Person'
class Person {
    name: string;
    age: number;

    // Constructor to initialize 'name' and 'age'
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    // Method to display a message
    greet(): void {
        console.log(`My name is ${this.name} and I am ${this.age} years old.`);
    }
}

// Create instances of the Person class
let person1 = new Person("Jack", 30);
let person2 = new Person("Tina", 33);

// Call greet() method
person1.greet();
person2.greet();

输出

My name is Jack and I am 30 years old.
My name is Tina and I am 33 years old

创建类

在 TypeScript 中,我们使用 class 关键字创建类。例如,

// Create a class
class Person {
    // Body of class
};

类构造函数

构造函数是类中的一个特殊方法,当使用 new 关键字创建实例时,它会自动运行。

Constructor of the Person Class
Person 类的构造函数

当创建该类的新实例时,Person 类的构造函数会初始化 nameage 属性。

这里,

  • person1 对象使用 "Jack"30 进行初始化
  • person2 对象使用 "Tina"33 进行初始化

类方法

类方法是类内部的一个函数,它定义了类对象的行为。

Method of the Person Class
Person 类的类方法

在这里,greet()Person 类的一个方法,当在类的对象上调用时,它会显示问候消息。


更多关于 TypeScript 类

字段初始化器(默认值)

在 TypeScript 中,您可以直接为类属性分配默认值。这样,即使在创建对象时没有传递任何值,也会使用默认值。例如,

class Person {
    name: string = "Jack";
    age: number = 18;

    greet(): void {
        console.log(`My name is ${this.name} and I am ${this.age} years old.`);
    }
}

let person1 = new Person();
person1.greet();

// Output: My name is Jack and I am 18 years old.

在这里,nameage 已经有了值。所以即使我们在创建 person1 时没有传递任何内容,它仍然可以使用默认值工作。

类中的类型推断

在分配默认值时,TypeScript 可以自动推断属性的类型。例如,

class Animal {
type = "Dog"; // TypeScript infers: type: string
} let pet = new Animal(); console.log(typeof pet.type); // Output: string
访问修饰符

在 TypeScript 中,访问修饰符控制类属性或方法可以在何处访问

  • public - 可以在任何地方访问(默认)
  • private - 只能在类内部使用
  • protected - 可以在类内部及其子类中使用

例如,

class Person {
    public name: string = "Jack";
    private age: number = 30;
}

let p1 = new Person();

console.log(p1.name); // Output: Jack
console.log(p1.age);  // Error: Property 'age' is private

在这里,name 是公共的,可以直接访问。但 age 是私有的 — 因此在类外部使用它会导致错误。

要了解更多信息,请参阅 TypeScript 访问修饰符


阅读更多

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战