interview
typescript-frontend
什么是 TypeScript 的泛型

前端 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]]; }。这个函数接受一个包含两个元素的元组,并返回一个元素顺序相反的元组。

用途

面试中涉及 TypeScript 的泛型主要是为了评估候选人对代码重用性、类型安全性以及灵活性设计的理解和能力。泛型在大型代码库中非常有用,特别是在构建库、框架、工具函数或与复杂数据结构交互时。使用泛型可以使代码更具通用性和适应性,同时减少代码重复,提高维护性。面试这个内容可以帮助判断候选人是否能够在实际工作中编写可扩展和稳健的代码。\n

相关问题

🦆
TypeScript 中的类型推断是什么?

类型推断是指 TypeScript 可以在没有明确指定类型的情况下,根据上下文自动推断出变量、函数的类型。类型推断的强大之处在于它减少了显式类型声明的需求,从而简化了代码。

🦆
什么是 TypeScript 的联合类型Union Types?

联合类型是一种 TypeScript 类型,它允许一个值可以是几种不同类型之一。通过使用 '|' 运算符定义。例如:let value: string | number; 这表示 value 可以是 string 或 number 类型。

🦆
接口和类型别名的区别是什么?

接口和类型别名在定义对象结构时很相似,但接口可以被扩展和实现,而类型别名则不能。此外,类型别名可以用于更复杂的类型组合(如联合类型、交叉类型),而接口则主要用于定义对象的形状。

🦆
TypeScript 中的交叉类型Intersection Types是什么?

交叉类型是指将多个类型合并为一个类型,它包含所有合并类型的属性。通过使用 '&' 运算符定义。例如:type Person = { name: string } & { age: number }; 这个类型包含了 name 和 age 两个属性。

🦆
如何在 TypeScript 中定义只读属性?

可以使用 readonly 修饰符来定义只读属性。只读属性只能在初始化时(例如在构造函数中)赋值,之后不能修改。例如:interface Point { readonly x: number; readonly y: number; }