TypeScript类:感受强类型语言赋能
2023-11-03 13:04:35
TypeScript 缘起:对 JavaScript 的强力补充
JavaScript 作为一门动态类型语言,有着强大的灵活性,但在开发中却容易出现类型错误,导致运行时错误。而且,随着 JavaScript 版本的更新迭代,不同的版本间也存在着兼容性问题,在代码编写和维护时容易出现问题。
TypeScript 应运而生,它是一种强类型语言,可以让你在开发中就能检查类型错误,减少运行时错误,同时还支持面向对象编程,让你能写出更结构化的代码。TypeScript 代码可以编译成 JavaScript 代码,因此你可以继续使用现有的 JavaScript 工具和库。
TypeScript 类:面向对象编程的基石
TypeScript 类是一种用来封装数据的结构,它可以让你把相关的数据和行为组织在一起。类可以被实例化,每个实例都有自己的数据和行为。
1. 类定义
class Person {
private name: string;
private age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
在这个例子中,Person
类有两个私有属性:name
和 age
,以及一个公共方法 greet()
。私有属性只能在类的内部访问,而公共方法则可以在类的外部访问。
2. 类实例化
const person1 = new Person('John', 30);
person1.greet(); // Hello, my name is John and I am 30 years old.
这个例子中,我们实例化了一个 Person
类,并给它起了名字 person1
。然后我们调用 person1
的 greet()
方法,它会输出 "Hello, my name is John and I am 30 years old."。
TypeScript 类的特性
1. 继承
TypeScript 类支持继承,你可以创建一个子类来继承父类的属性和方法。子类可以重写父类的方法,从而实现自己的行为。
class Employee extends Person {
private salary: number;
constructor(name: string, age: number, salary: number) {
super(name, age); // 调用父类的构造函数
this.salary = salary;
}
public getSalary() {
return this.salary;
}
}
const employee1 = new Employee('Jane', 25, 50000);
console.log(employee1.getSalary()); // 50000
在这个例子中,Employee
类继承了 Person
类,它有自己的属性 salary
和方法 getSalary()
。我们可以通过 employee1
实例来访问这些属性和方法。
2. 封装
TypeScript 类支持封装,你可以把数据和行为封装在类中,从而隐藏它们的实现细节。这使得你的代码更容易维护和重用。
class Secret {
private value: string;
constructor(value: string) {
this.value = value;
}
public getValue() {
return this.value;
}
}
const secret1 = new Secret('Top secret');
console.log(secret1.getValue()); // Top secret
在这个例子中,Secret
类有一个私有属性 value
,它只能通过 getValue()
方法来访问。这使得我们能够隐藏 value
的实现细节,只暴露一个公共接口。
3. 多态
TypeScript 类支持多态,你可以通过子类来重写父类的方法,从而实现不同的行为。这使得你的代码更灵活,更容易扩展。
class Animal {
public makeSound() {
console.log('Animal sound');
}
}
class Dog extends Animal {
public override makeSound() {
console.log('Woof!');
}
}
class Cat extends Animal {
public override makeSound() {
console.log('Meow!');
}
}
const dog1 = new Dog();
const cat1 = new Cat();
dog1.makeSound(); // Woof!
cat1.makeSound(); // Meow!
在这个例子中,Dog
类和 Cat
类继承了 Animal
类,它们重写了 makeSound()
方法来实现自己的行为。这使得我们可以通过不同的子类来调用 makeSound()
方法,从而实现不同的行为。
结语
TypeScript 类是面向对象编程的基础,它可以让你写出更结构化的代码,并提高代码的可维护性和可重用性。TypeScript 类的特性,如继承、封装和多态,使得它非常适合构建大型和复杂的应用程序。