推荐答案
TypeScript 中的泛型(Generics)是一种创建可重用组件的工具,它允许我们定义函数、类或接口时使用类型参数,从而在使用时指定具体的类型。泛型的主要作用是提高代码的灵活性和可重用性,同时保持类型安全。
定义泛型
泛型通过在函数、类或接口的名称后面使用尖括号 <T>
来定义,其中 T
是类型参数,可以是任何有效的类型。
function identity<T>(arg: T): T { return arg; }
使用泛型
在使用泛型时,可以显式指定类型参数,也可以让 TypeScript 自动推断类型。
let output1 = identity<string>("Hello"); // 显式指定类型 let output2 = identity(42); // 自动推断类型为 number
本题详细解读
泛型的概念
泛型允许我们在编写代码时不预先指定具体的类型,而是在使用时动态指定类型。这种方式使得代码更加灵活,能够处理多种类型的数据,而不需要为每种类型编写重复的代码。
泛型的作用
- 提高代码复用性:通过泛型,可以编写适用于多种类型的函数、类或接口,减少代码重复。
- 保持类型安全:泛型在编译时进行类型检查,确保类型安全,避免运行时错误。
- 增强代码可读性:使用泛型可以使代码更加简洁和易于理解,因为类型参数可以清晰地表达代码的意图。
泛型的定义和使用
泛型可以应用于函数、类和接口。
泛型函数
function identity<T>(arg: T): T { return arg; }
泛型类
class GenericNumber<T> { zeroValue: T; add: (x: T, y: T) => T; }
泛型接口
interface GenericIdentityFn<T> { (arg: T): T; }
泛型约束
有时我们希望泛型参数具有某些特定的属性或方法,这时可以使用泛型约束。
interface Lengthwise { length: number; } function loggingIdentity<T extends Lengthwise>(arg: T): T { console.log(arg.length); return arg; }
默认泛型类型
可以为泛型参数指定默认类型,当没有显式指定类型时,使用默认类型。
function createArray<T = string>(length: number, value: T): Array<T> { let result: T[] = []; for (let i = 0; i < length; i++) { result[i] = value; } return result; }