注意: 如果您是 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
类来初始化 name
和 age
,以及一个 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
对象具有
- 属性 -
name
和age
,值分别为"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
关键字创建实例时,它会自动运行。

当创建该类的新实例时,Person
类的构造函数会初始化 name
和 age
属性。
这里,
person1
对象使用"Jack"
和 30 进行初始化person2
对象使用"Tina"
和 33 进行初始化
类方法
类方法是类内部的一个函数,它定义了类对象的行为。

在这里,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.
在这里,name
和 age
已经有了值。所以即使我们在创建 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 访问修饰符。
阅读更多