TypeScript泛型


泛型

泛型是一种强大的特性,它允许开发者定义可以接收不同类型参数的函数、类和接口,从而提高代码的复用性和灵活性。

1. 泛型函数

泛型函数允许在函数声明时定义一个或多个类型参数,从而可以在函数体内使用这些参数作为类型。

示例:

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

const str = identity<string>("Hello"); // 指定类型为 string
const num = identity<number>(123); // 指定类型为 number

console.log(str); // 输出:Hello
console.log(num); // 输出:123

2. 泛型类

泛型类允许类在声明时使用类型参数,从而可以为类的属性和方法定义灵活的类型。

示例:

class GenericBox<T> {
    private value: T;

    constructor(value: T) {
        this.value = value;
    }

    getValue(): T {
        return this.value;
    }
}

const stringBox = new GenericBox<string>("Hello");
const numberBox = new GenericBox<number>(42);

console.log(stringBox.getValue()); // 输出:Hello
console.log(numberBox.getValue()); // 输出:42

3. 泛型接口

泛型接口允许定义带有类型参数的接口,可以用于描述具有特定属性和方法的对象。

示例:

interface Pair<K, V> {
    key: K;
    value: V;
}

const pair1: Pair<number, string> = { key: 1, value: "One" };
const pair2: Pair<string, boolean> = { key: "isActive", value: true };

console.log(pair1); // 输出:{ key: 1, value: 'One' }
console.log(pair2); // 输出:{ key: 'isActive', value: true }

总结

通过泛型函数、泛型类和泛型接口,TypeScript 允许开发者编写更加灵活和可复用的代码。泛型的使用能够显著提高类型安全性和代码的可读性,使得函数和类能够处理不同类型的数据而不丧失类型信息。