TypeScript 类、泛型的使用实践记录 | 青训营

78 阅读5分钟

1.TypeScript类泛型介绍

TypeScript是一种静态类型的编程语言,它是JavaScript的超集,可以被编译为纯JavaScript代码。TypeScript支持类和对象的概念,可以通过类来定义对象的结构和行为。 类是面向对象编程的一种重要概念,它是一种蓝图或模板,用于创建具有相同属性和方法的对象。类可以包含属性(即数据)和方法(即操作数据的函数)。通过使用类,可以创建多个对象,这些对象共享类中定义的属性和方法。

TypeScript的类支持以下特性:

  1. 属性和方法:类可以包含属性和方法,属性用于存储数据,方法用于操作数据。
  2. 构造函数:类可以有一个特殊的方法叫做构造函数,它用于创建和初始化对象。
  3. 继承:类可以通过继承来扩展其他类的功能,子类可以继承父类的属性和方法。
  4. 访问修饰符:可以使用访问修饰符来限制属性和方法的访问权限,如public(公共)、private(私有)和protected(受保护)。
  5. 静态成员:可以使用static关键字将属性和方法定义为静态成员,静态成员可以在类的实例之间共享。
  6. 抽象类:可以使用abstract关键字定义抽象类,抽象类不能被实例化,只能被继承。抽象类可以包含抽象方法,子类必须实现这些抽象方法。

通过使用类和对象,可以更好地组织和结构化代码,并且可以提高代码的可复用性和可维护性。在TypeScript中,类是一种强大的工具,可以帮助开发者编写更结构化、可靠和可扩展的代码。

当使用 TypeScript 编写类和泛型时,以下是一些常见的使用实践:

2.TypeScript类的优点有以下几个:

  1. 类型安全:TypeScript作为静态类型的编程语言,在类定义时可以明确定义属性和方法的类型,大大降低了在开发过程中的类型错误。

  2. 可读性和维护性:类的使用可以提高代码的可读性和可维护性,通过将相关的属性和方法封装在一个类中,可以更方便地对功能进行组织和管理。

  3. 继承和多态:TypeScript支持类之间的继承和多态的概念,可以让代码更加灵活和可扩展。子类可以继承父类的属性和方法,并可以根据需要进行重写或扩展。

  4. 封装和抽象:类提供了封装和抽象的机制,可以隐藏内部的实现细节,只向外部暴露必要的接口。这样可以提高代码的封装性和安全性。

  5. 模块化和可重用性:TypeScript的类可以通过模块化的方式进行组织,可以将相关的类放在一个模块中,方便进行复用和管理。

总的来说,TypeScript类提供了更强大的面向对象编程的能力,可以提高代码的可重用性、可维护性和可扩展性,是进行复杂应用开发的一种非常有力的工具。

3.泛型使用方法:

  1. 泛型函数:可以在函数定义时使用泛型来指定函数参数或返回值的类型。例如:
function identity<T>(arg: T): T {
  return arg;
}

let result = identity<string>("hello");
  1. 泛型类:可以在类定义时使用泛型来指定类的属性或方法的类型。例如:
class Pair<T, U> {
  private first: T;
  private second: U;

  constructor(first: T, second: U) {
    this.first = first;
    this.second = second;
  }

  getFirst(): T {
    return this.first;
  }

  getSecond(): U {
    return this.second;
  }
}

let pair = new Pair<number, string>(1, "apple");
  1. 泛型接口:可以在接口定义时使用泛型来指定接口的属性或方法的类型。例如:
interface List<T> {
  push(item: T): void;
  pop(): T;
}

let list: List<number> = {
  push(item: number) {
    // ...
  },
  pop() {
    // ...
    return 0;
  }
};

常见的场景:

  1. 容器类型:适用于存储多种类型的数据的容器,比如数组、列表、堆栈等。

  2. 函数的参数类型:适用于需要在多个函数中使用相同类型参数的情况,可以增加代码的重用性和灵活性。

  3. 抽象数据类型:适用于需要对不同类型的数据进行抽象和封装的情况,比如集合、树等。

  4. 类型安全性:泛型可以帮助在编译时捕获一些类型错误,增加代码的安全性和可维护性。

4.示例 TypeScript 类的实例代码:

class Person {
  private name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  public getName(): string {
    return this.name;
  }

  public getAge(): number {
    return this.age;
  }

  public celebrateBirthday(): void {
    this.age++;
  }
}

const person = new Person("John Doe", 25);
console.log(person.getName()); // 输出 "John Doe"
console.log(person.getAge()); // 输出 25

person.celebrateBirthday();
console.log(person.getAge()); // 输出 26

在上面的代码中,我们定义了一个名为 Person 的类,它有两个私有属性 nameage。构造函数接受一个 nameage 参数,并将它们分配给类的属性。定义了三个公共方法:getName() 返回 name 属性的值,getAge() 返回 age 属性的值,以及 celebrateBirthday() 方法用于增加 age 属性的值。然后,创建了一个名为 personPerson 类的实例,传入 "John Doe"25 作为参数。我们可以使用 getName()getAge() 方法获取到该实例的名称和年龄,并使用 celebrateBirthday() 方法增加年龄。最后,我们分别输出了 nameage 属性的值。