泛型是在定义函数、类、接口时不指定具体类型,而在使用时再指定具体类型的一种特性。在TypeScript中,泛型可以让代码更加灵活和复用性更强。

泛型函数

在定义泛型函数时,可以使用<T>来表示泛型类型,并在函数参数或返回值中使用该类型。

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

let output = identity<string>("hello");

泛型接口

泛型接口可以用于定义接口中的属性或方法的数据类型。

interface GenericIdentityFn<T> {
    (arg: T): T;
}

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

let myIdentity: GenericIdentityFn<number> = identity;
let result = myIdentity(123);

泛型类

泛型类可以用于定义类中的属性或方法的数据类型。

class GenericNumber<T> {
    zeroValue: T;
    add: (x: T, y: T) => T;
}

let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };

泛型约束

可以使用泛型约束来限制泛型的类型。

interface Lengthwise {
    length: number;
}

function loggingIdentity<T extends Lengthwise>(arg: T): T {
    console.log(arg.length);
    return arg;
}

loggingIdentity({ length: 10, value: 3 });

以上是泛型的基础使用方法,通过泛型可以更好地重用代码、增强代码的灵活性和安全性。在实际开发中,可以根据需求灵活运用泛型来提高代码质量和效率。