简述TypeScript 中的泛型是什么,如何使用 ?

在TypeScript中,泛型是一种工具,允许你在定义函数、接口、类时不预先指定具体的类型,而是在使用时指定类型。泛型提供了一种方法来确保函数或类的灵活性和重用性,同时保持类型的完整性和安全性。

什么是泛型?

泛型允许你创建可以适用于多种类型而不是单一类型的组件。通过使用泛型,你可以创建通用的函数、接口和类,它们可以安全地工作于多种类型而不丢失类型信息。

如何使用泛型?

泛型函数

你可以创建一个接受类型参数的函数,然后在函数体内部使用这个类型参数。这样,函数就可以根据传入的类型参数变化其行为。

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

let output1 = identity<string>("myString");  // 类型为 string
let output2 = identity<number>(100);  // 类型为 number

在这个例子中,identity函数添加了一个类型变量TT帮助你捕获用户提供的类型(比如stringnumber),之后就可以使用这个类型。通过<string><number>,我们明确了T分别代表stringnumber类型。

泛型接口

泛型也可以用于接口。泛型接口可以让你定义带有不特定类型的属性或方法的接口。

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

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

let myIdentity: GenericIdentityFn<number> = identity;

这个例子中的GenericIdentityFn是一个泛型接口,它定义了一个函数,该函数接收一个类型为T的参数并返回一个类型为T的值。

泛型类

泛型也可以用于类的定义。但是,泛型类只能影响类的实例部分,因为类的静态属性不能使用类的泛型类型参数。

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; };

在这个例子中,GenericNumber类使用了泛型类型T。然后我们创建了一个GenericNumber<number>的实例,明确指定Tnumber类型。

为什么使用泛型?

泛型的主要优点是它们提高了代码的复用性、保持了类型安全,并使得代码更加灵活。使用泛型可以让你创建工作于多种类型的组件,而不是限定于某一类型,同时在编译时保持严格的类型检查。这样,你可以捕获更多的错误,并编写更通用、更健壮的代码。

发表评论

后才能评论