TypeScript 概览
TypeScript 是一种由微软开发的开源、跨平台的编程语言。它是 JavaScript 的超集,最终会被编译为 JavaScript 代码。
TypeScript 的核心设计目标是:在 JavaScript 的基础上提供静态类型系统,并在编译阶段进行类型检查,从而提前发现潜在的运行时错误,提高代码的可维护性和大型项目的开发效率。
核心优势
- 类型安全:在编译阶段发现大部分拼写或类型错误,降低线上 Bug 率。
- 重构友好:修改一处接口定义,IDE 会自动提示所有不兼容的引用处,大幅降低重构风险。
- IDE 支持增强:得益于类型声明,代码补全、接口提示、跳转到定义等功能极其丝滑。
- 拥抱新特性:支持最新的 ECMAScript 规范,并可向下编译。
目录结构与学习路线
本章节将从以下几个核心维度深入探讨 TypeScript,涵盖了日常开发与面试中的高频考点:
1. 基础语法与类型系统
掌握 TypeScript 的基石,涵盖如何定义和组合类型:
- 基础数据类型与复杂数据结构(
enum,tuple,any,unknown,never,void等)。 interface(接口)与type(类型别名)的异同与使用场景。- 类型收窄与守卫(
typeof,instanceof,in,is)。 - 联合类型(
|) 与 交叉类型(&)。 - 泛型(Generics) 基础概念。
2. 内置工具与进阶泛型
进阶必备,理解并能手写 TS 高级类型体操:
- 常用内置工具泛型:
Partial、Required、Pick、Omit、Record、Exclude、Extract、ReturnType等。 - 条件类型(Conditional Types) 与
infer关键字。 - 映射类型(Mapped Types)(如
in keyof)。 - 模板字面量类型。
3. 编译配置 (tsconfig)
项目工程化核心,理解 TS 编译器的行为:
- 常用编译选项解析(
target,module,lib)。 - 严格模式(
strict家族)。 - 模块解析策略与路径别名(
baseUrl,paths)。 - 声明文件(
.d.ts)的生成与引用。
面试高频核心概念补充
除了具体的语法,以下几个 TypeScript 的设计理念和宏观概念也是面试中经常被问到的(作为本目录下的补充):
结构化类型系统(Structural Typing)
TypeScript 采用的是鸭子类型(Duck Typing)或结构化类型系统。 这意味着只要两个对象的结构(包含的属性和方法)一致,它们就被认为是互相兼容的,而不需要像 Java 那样显式声明实现了某个接口(Nominal Typing 标称类型系统)。 “如果它走起来像鸭子,叫起来像鸭子,那它就是鸭子。”
Any vs Unknown
any:放弃类型检查。它是顶层类型,也是底层类型(可以赋值给任何类型,任何类型也能赋值给它)。unknown:安全的 any。它是顶层类型(任何类型都能赋值给它),但在确定其具体类型之前,你不能对它进行任何操作(不能读取属性、不能调用方法),必须先通过类型守卫(Type Narrowing)进行收窄。
声明合并(Declaration Merging)
TypeScript 编译器会将两个或多个同名声明合并为一个单独的声明。这在 interface 和 namespace 中非常常见,也是我们在扩展第三方库全局变量(如向 window 对象追加自定义属性)时经常使用的手段。
Tip: 在实际开发中,应尽量避免使用
any(避免变成 AnyScript)。遇到复杂类型推导时,多利用泛型和内置工具类型进行处理,这样不仅能保证类型安全,也是向高级前端进阶的必经之路。