TypeScript 面试题精选
以下是目前大厂和中高级前端岗位最常问的 TypeScript 面试题,按出现频率和难度从高到低排序,涵盖基础、进阶、工程化、类型体操等多个维度。
基础 & 核心概念(几乎必问)
- TypeScript 和 JavaScript 的主要区别是什么?TypeScript 的优势和劣势分别有哪些?
- type 和 interface 有什么区别?什么场景下应该用哪个?
- 什么是类型推断(Type Inference)?举几个常见的类型推断场景。
- const 和 readonly 的区别?什么时候用 readonly?
- 什么是类型兼容性(Type Compatibility)?结构类型系统和标称类型系统有什么区别?
- any、unknown、never 三者的区别和使用场景分别是什么?
- 泛型(Generics)是什么?为什么需要泛型?写出几个常见的泛型工具类型的使用场景。
中级 & 常用高级类型(非常高频)
- extends 在 TypeScript 中有几种含义?分别是什么?
- 条件类型(Conditional Types)是什么?infer 关键字怎么用?
- 分布式条件类型(Distributive Conditional Types)是什么?什么时候会触发分布式?
- keyof、typeof、in、as const 这几个关键字分别在什么场景下使用?
- 请手写以下几个高频工具类型(至少说出思路):
- Partial
- Required
- Pick<T, K>
- Omit<T, K>
- Exclude<T, U>
- Extract<T, U>
- NonNullable
- ReturnType
- Parameters
- ConstructorParameters
- InstanceType
- 如何实现一个深度 Partial(DeepPartial)?
进阶 & 类型体操(中高级必考)
- 如何约束泛型参数必须是某个类型的 key?(keyof)
- 如何写一个类型,让它接收一个对象类型,返回这个对象所有值的联合类型?
- 如何实现一个类型 Get<T, K>,可以支持多级路径(如 Get<User, 'address.street'>)?
- 什么是映射类型(Mapped Types)?如何利用映射类型实现一个类型反转(key 和 value 互换)?
- 如何实现一个类型 IsEqual<T, U>,判断两个类型是否完全相等?(考虑分布式)
- 如何写一个类型,让它把一个联合类型转成交叉类型?(Union to Intersection)
- 模板字面量类型(Template Literal Types)在 4.1+ 版本有什么典型应用场景?
工程 & 实际应用(大厂偏爱)
- 在项目中如何更好地使用 TypeScript?(最佳实践角度)
- @ts-ignore、@ts-expect-error、@ts-nocheck、@ts-check 分别是什么意思?使用场景和优先级?
- declare 关键字有什么作用?什么时候需要用 declare?

