返回

TypeScript类:感受强类型语言赋能

前端

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 类有两个私有属性:nameage,以及一个公共方法 greet()。私有属性只能在类的内部访问,而公共方法则可以在类的外部访问。

2. 类实例化

const person1 = new Person('John', 30);
person1.greet(); // Hello, my name is John and I am 30 years old.

这个例子中,我们实例化了一个 Person 类,并给它起了名字 person1。然后我们调用 person1greet() 方法,它会输出 "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 类的特性,如继承、封装和多态,使得它非常适合构建大型和复杂的应用程序。