前端 TypeScript 面试题, 什么是 TypeScript 的泛型?
前端 TypeScript 面试题, 什么是 TypeScript 的泛型?
QA
Step 1
Q:: 什么是 TypeScript 的泛型?
A:: TypeScript 的泛型是一种允许我们在编写代码时使用类型参数的特性。它使得函数、类、接口可以处理不同类型的数据,而不必牺牲类型安全性。泛型通常用于编写可复用的代码片段,在不确定使用何种数据类型时提供灵活性。
Step 2
Q:: 如何在函数中使用泛型?
A:: 可以在函数名称后面加上一个尖括号 '<>',并在其中定义泛型类型参数。例如:function identity<T>(arg: T): T { return arg; }
。此函数的参数和返回值类型都由泛型参数 T 决定,调用时可以指定 T 的类型,也可以让编译器自动推断。
Step 3
Q:: 如何在类中使用泛型?
A:: 在定义类时,可以在类名后添加泛型参数。例如:class GenericNumber<T> { zeroValue: T; add: (x: T, y: T) => T; }
。这个类可以与不同的类型配合使用,通过指定 T 类型来创建实例。
Step 4
Q:: 泛型约束是什么?如何使用?
A:: 泛型约束是指在使用泛型时,可以指定一个条件或接口来限制泛型类型。例如:function loggingIdentity<T extends Lengthwise>(arg: T): T { console.log(arg.length); return arg; }
,其中 Lengthwise 是一个接口,要求 T 必须具有 length 属性。
Step 5
Q:: 可以在泛型中使用多个类型参数吗?
A:: 可以的,可以在泛型中使用多个类型参数,用逗号分隔它们。例如:function swap<T, U>(tuple: [T, U]): [U, T] { return [tuple[1], tuple[0]]; }
。这个函数接受一个包含两个元素的元组,并返回一个元素顺序相反的元组。