TypeScript 核心概念与高频面试题详解
1. 请解释 TypeScript 是什么?它与 JavaScript 的核心区别是什么?
TypeScript 是 JavaScript 的超集,在 JS 语法基础上增加了静态类型系统,最终会编译为纯 JS 运行。其核心目标是提升代码可维护性、减少运行时错误。
与 JavaScript 的核心区别:
- 类型系统:TS 有静态类型(编译阶段检查),JS 是动态类型(运行时确定)。
- 编译阶段:TS 需通过编译器(如 tsc)编译为 JS;JS 可直接运行。
- 特性补充:TS 新增接口、泛型、枚举等原生类型相关特性。
- 开发体验:TS 支持 IDE 智能提示、自动补全及类型错误提前预警。
2. TypeScript 支持哪些基本数据类型?
- 原始类型:
string、number、boolean、null、undefined、symbol、bigint。 - 特殊类型:
any:任意类型,关闭类型检查,不推荐滥用。unknown:未知类型,比 any 安全,需断言后使用。void:无返回值类型,常用于函数。never:永不存在的类型,如抛出错误的函数。
3. 接口(Interface)和类型别名(Type Alias)的区别是什么?
- 相同点:均可定义对象/函数类型,均支持泛型。
- 核心区别:
- 扩展方式:Interface 用
extends,Type Alias 用交叉类型&。 - 合并能力:Interface 支持声明合并,Type Alias 不支持。
- 适用范围:Interface 仅能定义对象/函数,Type Alias 可定义任意类型(如联合类型)。
- 扩展方式:Interface 用
- 使用场景:优先用 Interface 定义组件 Props 或 API 结构;优先用 Type Alias 定义联合类型或复杂复用类型。
4. 什么是泛型(Generic)?为什么需要泛型?
泛型允许在定义函数、接口、类时不指定具体类型,使用时动态传入。它能避免使用 any 导致的类型丢失,并实现一套逻辑支持多种类型。
// 通用数组工具函数
function getFirstElement<T>(arr: T[]): T | undefined {
return arr[0];
}
const strArr = ["a", "b"];
const firstStr = (strArr);

