TypeScript类
在typescript中,类(Classes)是一种用于创建对象的模板或蓝图。它们提供了一种封装数据(属性)和行为(方法)的方式,使得代码更加模块化和可重用。TypeScript扩展了JavaScript的类系统,并添加了一些有用的特性,如类型注解、访问修饰符和抽象类等。
1. 基本类的定义
在TypeScript中,你可以使用class
关键字来定义一个类。类可以包含属性(字段)和方法(函数)。
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
在这个例子中,Greeter
类有一个属性greeting
和一个方法greet
。constructor
是一个特殊的方法,用于在创建对象时初始化属性。
2. 创建类的实例
要使用类,你需要创建它的一个实例(对象)。这可以通过使用new
关键字来完成。
let greeter = new Greeter("world");
console.log(greeter.greet()); // 输出: Hello, world
3. 访问修饰符
TypeScript支持三种访问修饰符:public
(默认)、private
和protected
。
public
:属性或方法是公开的,可以在任何地方访问。private
:属性或方法是私有的,只能在类内部访问。protected
:属性或方法是受保护的,只能在类内部或子类中访问。
class Animal {
private name: string;
constructor(theName: string) { this.name = theName; }
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
protected getName(): string {
return this.name;
}
}
在这个例子中,name
属性是私有的,只能在Animal
类内部访问。move
方法是公开的,可以在任何地方调用。getName
方法是受保护的,只能在Animal
类内部或子类中调用。
4. 继承
TypeScript支持类的继承,这意味着你可以创建一个类(子类),它继承另一个类(父类)的属性和方法。
class Dog extends Animal {
constructor(name: string) { super(name); }
bark() {
console.log(`${this.getName()} says Woof!`);
}
}
在这个例子中,Dog
类继承自Animal
类。Dog
类有一个bark
方法,它调用了受保护的getName
方法来获取Dog
对象的名称。
5. 静态属性和方法
静态属性和方法属于类本身,而不是类的实例。它们通过类名而不是实例来访问。
class MathHelper {
static add(a: number, b: number): number {
return a + b;
}
}
console.log(MathHelper.add(3, 4)); // 输出: 7
在这个例子中,MathHelper
类有一个静态方法add
,它可以直接通过MathHelper
类名来调用。
6. 抽象类和方法
抽象类和方法在TypeScript中用于定义那些不应该被实例化的类,或者那些包含应该在子类中实现的方法的类。
abstract class Animal {
abstract makeSound(): void;
move(): void {
console.log('roaming the earth...');
}
}
class Dog extends Animal {
makeSound() {
console.log('Woof! Woof!');
}
}
在这个例子中,Animal
是一个抽象类,它有一个抽象方法makeSound
。Dog
类继承自Animal
类,并实现了makeSound
方法。
7. 类的修饰符
TypeScript还支持类的修饰符,如readonly
(只读属性)和static readonly
(静态只读属性)。
class Grid {
static readonly Origin = { x: 0, y: 0 };
readonly size: number;
constructor(size: number) {
this.size = size;
}
}
console.log(Grid.Origin.x); // 输出: 0
let myGrid = new Grid(10);
// myGrid.size = 20; // 错误: 'size' 是只读属性
在这个例子中,Grid
类有一个静态只读属性Origin
和一个只读实例属性size
。
类是TypeScript中一个非常重要的特性,它允许你创建结构化、可重用和可扩展的代码。通过定义类,你可以封装数据和行为,并通过继承和多态来实现代码的复用和灵活性。
本文地址:https://www.tides.cn/p_typescript-class