TypeScript 的泛型(Generics)

TypeScript 的泛型(Generics)是一种在编写可复用、灵活且类型安全的代码时非常有用的特性。泛型允许你在编写函数、类或接口时使用参数化类型,这些参数化类型在使用时可以被具体指定。

基本概念

泛型允许你编写能够适用于各种类型的代码,而不是固定于一种特定类型。在函数、类或接口中,你可以定义一个或多个类型参数,这些类型参数将在实际使用时被替换为具体的类型。

用法示例

1. 函数泛型

function identity<T>(arg: T): T {
    return arg;
}

let result = identity<string>("hello");
// result 的类型为 string,因为传入的参数是字符串类型

在这个例子中,<T> 表示这是一个类型参数,可以接受任何类型的参数。当我们调用 identity 函数时,通过 <string> 指定了类型参数 T 为 string,因此 TypeScript 知道返回值的类型应该是 string

2. 接口泛型

interface Box<T> {
    value: T;
}

let box: Box<number> = { value: 10 };
// box 中的 value 必须是数字类型

这个示例中,Box 接口使用了一个类型参数 T,用来指定 value 属性的类型。通过指定 <number>,我们告诉 TypeScript box 对象中的 value 属性应该是数字类型。

 

3. 类泛型

class Queue<T> {
    private  T[] = [];

    push(item: T) {
        this.data.push(item);
    }

    pop(): T | undefined {
        return this.data.shift();
    }
}

let numberQueue = new Queue<number>();
numberQueue.push(1);
numberQueue.push(2);
let firstItem = numberQueue.pop();
// firstItem 的类型为 number

在这个示例中,Queue 类使用了类型参数 T,用来指定队列中的元素类型。当我们创建 numberQueue 实例时,指定了类型参数为 number,所以该队列只能存储数字类型的元素。

优势

  • 代码复用性:泛型使得你能够编写可重用的代码,而不必限制于特定的类型。
  • 类型安全:使用泛型可以在编译时捕获类型错误,确保类型的一致性。
  • 灵活性:可以将泛型应用于函数、类、接口等不同的语法结构,使得代码更加灵活和可扩展。

泛型是 TypeScript 中非常强大和灵活的特性,能够帮助你编写更加通用、可维护和类型安全的代码。

posted @ 2024-05-14 15:38  炽橙子  阅读(36)  评论(0编辑  收藏  举报