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

35 阅读2分钟

TypeScript 类与泛型的实践

TypeScript 是一个 JavaScript 的超集,它添加了类型系统和其他一些功能,以提高 JavaScript 的可维护性和可读性。在这篇文章中,我们将探讨 TypeScript 中的泛型和类的使用方法,以及如何利用类型约束来提高代码的灵活性和安全性。

1. TypeScript 类

在 TypeScript 中,类是一种定义对象的模板。它提供了一种清晰、易理解的方式来创建对象,并支持面向对象编程的概念,如继承、接口、抽象类等。

下面是一个简单的类的示例:

class Animal {
  constructor(public name: string) {}

  move(distanceInMeters: number) {
    console.log(`${this.name} moved ${distanceInMeters}m.`);
  }
}

let dog = new Animal('Dog');
dog.move(10);

2. TypeScript 泛型

泛型是一种创建可重用组件的方式,它可以在多个类型之间工作,而不会丢失类型信息。

例如,我们可以创建一个泛型数组,它可以存储任何类型的数据,但仍然保持类型安全:

class GenericArray<T> {
  private items: T[];

  constructor() {
    this.items = [];
  }

  add(item: T) {
    this.items.push(item);
  }

  get(index: number): T {
    return this.items[index];
  }
}

let numbers = new GenericArray<number>();
numbers.add(1);

let strings = new GenericArray<string>();
strings.add('hello');

在上面的代码中,T 是一个类型变量,表示任意类型。当我们创建一个 GenericArray 的实例时,我们需要指定 T 的具体类型。

3. 使用类型约束

在某些情况下,我们可能需要限制泛型可以接受的类型。这可以通过使用类型约束来实现。

例如,我们可能需要创建一个函数,它可以处理任何具有 .length 属性的对象。我们可以创建一个包含 .length 属性的接口,然后使用这个接口作为类型约束:

interface HasLength {
  length: number;
}

function getLength<T extends HasLength>(item: T): number {
  return item.length;
}

console.log(getLength('hello'));  // 5
console.log(getLength([1, 2, 3]));  // 3

在上面的代码中,T extends HasLength 是一个类型约束,表示 T 必须是 HasLength 的子类型。这样,我们就可以确保 item 参数具有 .length 属性。

结论

TypeScript 的类和泛型是两个非常强大的特性,它们可以让我们更容易地创建复杂的数据结构,并保持代码的类型安全。通过使用类型约束,我们还可以限制泛型的使用,确保代码的正确性。