如何通过TypeScript面试:常见问题与示例
TypeScript已牢固确立为JavaScript企业级开发的标准。如果你正在准备面试,重要的不仅是掌握语法,还要理解类型、泛型和工具类型的工作方式。本文梳理了技术面试中经常问到的热门问题,并附有详细解答和代码示例。
无论你是初级开发者,还是想在重要面试前巩固知识,这份材料都将对你有帮助。
1. 什么是TypeScript?为什么需要它?
TypeScript是JavaScript的一个严格类型超集,可编译为纯JS。其主要目标是添加静态类型,从而能够:
- 在编译时而非运行时捕获错误。
- 提升代码的可读性和可维护性。
- 在IDE中获得自动补全和重构功能。
示例:
// JavaScriptfunction add(a, b) { return a + b; // a 和 b 可以是任何类型}
// TypeScriptfunction add(a: number, b: number): number { return a + b; // 如果传入字符串,编译时报错}在面试中,要强调TypeScript 并不取代 JavaScript,而是对其补充,使代码更加安全。
2. 基础类型及其用法
TypeScript提供了丰富的基础类型。关于这一主题的题目会考察你对类型系统的理解程度。
列举主要类型:
number、string、booleannull、undefinedany— 禁用类型检查(尽量避免使用)void— 用于不返回任何值的函数never— 用于永不结束的函数(例如抛出异常)
联合类型示例:
type Status = 'active' | 'inactive' | 'pending';let userStatus: Status = 'active'; // 只能是这三个值之一经常会被问到interface和type的区别。回答要点:interface可以扩展(extends),而type不能。对于对象,优先使用interface;对于原始类型和联合类型,更适合使用type。
3. 泛型——灵活性的基础
泛型允许你创建能处理不同类型、同时不丢失类型安全性的组件。这是最常见的面试题之一。
简单泛型示例:
function identity<T>(arg: T): T { return arg;}const result = identity<string>('hello'); // 类型为 stringconst numberResult = identity(42); // 类型为 number(类型推断)问题:如何约束泛型?
使用extends关键字:
function getLength<T extends { length: number }>(arg: T): number { return arg.length;}getLength('hello'); // 5getLength([1,2,3]); // 3// getLength(123); // 错误:number 没有 length 属性还会被问到接口中的泛型:
interface ApiResponse<T> { data: T; status: number; error?: string;}const userResponse: ApiResponse<{ id: number; name: string }> = { data: { id: 1, name: 'Alice' }, status: 200};4. 工具类型
TypeScript内置的工具类型简化了类型操作。掌握它们是经验丰富的开发者的标志。
需要了解的5个常用工具类型:
Partial<T>— 将所有字段变为可选。Required<T>— 将所有字段变为必选。Pick<T, K>— 仅选取指定的键。