Skip to main content

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 高级类型体操:

  • 常用内置工具泛型:PartialRequiredPickOmitRecordExcludeExtractReturnType 等。
  • 条件类型(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 编译器会将两个或多个同名声明合并为一个单独的声明。这在 interfacenamespace 中非常常见,也是我们在扩展第三方库全局变量(如向 window 对象追加自定义属性)时经常使用的手段。


Tip: 在实际开发中,应尽量避免使用 any(避免变成 AnyScript)。遇到复杂类型推导时,多利用泛型和内置工具类型进行处理,这样不仅能保证类型安全,也是向高级前端进阶的必经之路。