2025年Typescript最新高频面试题及核心解析
一、基础核心概念
-
TypeScript与JavaScript的核心区别
- 静态类型系统:TS在编译时进行类型检查,而JS是动态类型
- 面向对象增强:提供接口、泛型、枚举等特性,支持模块化和代码组织
- 开发工具支持:IDE智能提示、重构能力更优,适合大型项目协作
示例对比:
// JS无类型检查 function add(a, b) { return a + b; } // TS显式类型标注 function add(a: number, b: number): number { return a + b; }
-
any、unknown、never的区别
- any:关闭类型检查,慎用(可能引入运行时错误)
- unknown:类型安全的"顶级类型",使用前需显式类型断言或守卫
- never:表示永不返回值的类型(如抛出错误/无限循环)
场景示例:
function error(message: string): never { throw new Error(message); }
二、类型系统进阶
-
接口(interface)与类型别名(type)的区别
- 扩展性:
interface
支持声明合并和extends
继承,type
不可合并 - 灵活性:
type
可定义联合/交叉类型、元组等,interface
专注对象形状
使用建议: - 公共API或需扩展时用
interface
,复杂类型组合用type
- 扩展性:
-
泛型的核心作用与约束
- 场景:创建可复用的组件(如函数/类),支持多种类型同时保持类型安全
- 约束语法:通过
extends
限制泛型范围
示例:
function identity<T extends string | number>(arg: T): T { return arg; }
-
类型守卫(Type Guard)的实现方式
- typeof/instanceof:基础类型判断
- 自定义守卫:通过返回值
arg is Type
明确类型
示例:
function isString(value: unknown): value is string { return typeof value === 'string'; }
三、工程化与高级特性
-
TS配置选项解析
- strict模式:开启后强制启用所有严格类型检查(如
strictNullChecks
防止null
错误) - noImplicitAny:禁止隐式
any
类型,提升代码健壮性
- strict模式:开启后强制启用所有严格类型检查(如
-
装饰器(Decorators)的应用场景
- 类/方法装饰器:用于AOP编程(如日志、权限校验)
- 最新规范:ES提案阶段,需在
tsconfig
中启用experimentalDecorators
-
模块与命名空间的选择
- 模块(ES Modules):现代项目首选,支持树摇优化
- 命名空间:旧代码兼容方案,避免全局污染
四、高频代码题
-
实现Sleep函数(异步控制)
function sleep(ms: number): Promise<void> {return new Promise(resolve => setTimeout(resolve, ms)); }
-
类型推断题
输入:const tuple = ['hello', 10] as const
类型推断结果:readonly ["hello", 10]
(字面量类型 + 只读元组)
附:面试准备建议
- 重点掌握:类型系统(80%面试问题围绕此)、泛型、工程化配置
- 实战演练:通过TS Playground快速验证类型问题
- 延伸学习:类型体操(Utility Types)、TS 4.x+新特性(如模板字面量类型)