1. 类的基本语法
在 TypeScript 中,使用 class
关键字来定义类。以下是一个简单的类的示例:
class Person {
private name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
}
在上面的例子中,Person
类具有一个私有成员 name
和一个公共成员 age
,并且定义了一个构造函数 constructor
和一个 greet
方法。
2. 成员修饰符
TypeScript 提供了几种成员修饰符,用于控制类成员的可访问性:
public
:默认修饰符,表示成员可以在类的内部和外部访问。private
:表示成员只能在类的内部访问。protected
:表示成员可以在类的内部和派生类中访问。
例如,我们可以将 name
成员改为 private
,并在 greet
方法中访问它:
class Person {
private name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
}
3. 继承
TypeScript 支持类的继承,通过使用 extends
关键字来实现。子类可以继承父类的属性和方法,并且可以覆盖父类的方法或添加新的方法。
以下是一个继承的示例:
class Student extends Person {
studentId: string;
constructor(name: string, age: number, studentId: string) {
super(name, age);
this.studentId = studentId;
}
study() {
console.log(`${this.name} is studying.`);
}
}
在上面的例子中,Student
类继承自 Person
类,并添加了一个新的成员 studentId
和一个 study
方法。
4. 多态
多态是面向对象编程的一个重要概念,它允许不同的对象对同一个方法做出不同的响应。在 TypeScript
中,我们可以使用类的继承和方法的重写来实现多态。
以下是一个多态的示例:
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
makeSound() {
console.log("Generic animal sound.");
}
}
class Dog extends Animal {
makeSound() {
console.log("Woof!");
}
}
class Cat extends Animal {
makeSound() {
console.log("Meow!");
}
}
function playWithAnimal(animal: Animal) {
animal.makeSound();
}
const dog = new Dog("Buddy");
const cat = new Cat("Whiskers");
playWithAnimal(dog); // 输出 "Woof!"
playWithAnimal(cat); // 输出 "Meow!"
在上面的例子中,Animal
类定义了一个 makeSound
方法,而 Dog
和 Cat
类分别重写了这个方法。通过将不同的对象传递给 playWithAnimal
函数,我们可以实现多态,使得每个对象都发出不同的声音。
5. 提升代码可维护性和可扩展性
使用类的概念可以提高代码的可维护性和可扩展性。通过将相关的数据和方法封装在一个类中,可以提高代码的组织性和可读性。类的继承和多态让我们能够构建更具灵活性的代码结构,使得代码更容易扩展和重用。
此外,TypeScript 还提供了接口(interface)的概念,可以进一步定义类的结构和行为。接口可以用于约束类的实现,使得代码更加规范和可靠。
标签:TypeScript,name,age,多态,class,string From: https://www.cnblogs.com/DTCLOUD/p/17504696.html