TS7 的另一个重要变化是官方支持 LSP(Language Server Protocol)。


传统语言插件模式

在 LSP 之前,每个编辑器都要自己实现语言支持:

VS Code 需要 TypeScript 插件
WebStorm 需要 TypeScript 插件
Neovim 需要 TypeScript 插件
Sublime 需要 TypeScript 插件
...

每个编辑器团队都要:

  • 理解 TypeScript 的类型系统
  • 实现补全、跳转、诊断、重构
  • 跟进 TypeScript 的版本更新

这是重复劳动,而且每个实现的质量和功能都不一样。


LSP 的设计

LSP 把"语言能力"和"编辑器"解耦:

┌─────────────────┐
│  Editor (Client) │
│  VS Code         │
│  Neovim          │
│  Zed             │
└────────┬────────┘
         │ LSP Protocol

┌─────────────────┐
│ Language Server  │
│ TypeScript       │
│ Go               │
│ Rust             │
└─────────────────┘

Language Server 负责:

  • 解析代码
  • 类型检查
  • 提供补全信息
  • 提供诊断信息
  • 提供跳转、重构能力

Editor 负责:

  • 显示代码
  • 发送用户操作给 Server
  • 接收 Server 的响应并展示

两者通过标准化的 LSP Protocol 通信。


TypeScript 的语言能力层次

需要区分几个概念:

TypeScript 语言规范

TypeScript Compiler(tsc)

TypeScript Language Service

LSP(Language Server Protocol)

Editor(VS Code、Neovim...)
  • TypeScript Compiler:把 TypeScript 编译成 JavaScript
  • TypeScript Language Service:提供编辑器需要的语言能力(补全、诊断、跳转等)
  • LSP:一种协议,让 Language Service 可以和任何编辑器通信
  • Editor:实现 LSP Client,连接 Language Service

TypeScript Language Service 不等于 LSP。Language Service 是 TypeScript 自己的内部实现,LSP 是它暴露给编辑器的协议。


TS7 的 LSP 支持意味着什么

TS7 官方支持 LSP,意味着:

  • TypeScript 团队维护 Language Server 的实现
  • 编辑器只需要实现 LSP Client(标准化,工作量小)
  • 速度优化、新功能,所有编辑器同步享受
  • 不再需要为每个编辑器单独维护 TypeScript 插件

所以 TS7 发布后,VS Code、Neovim、Zed、Sublime、Emacs... 全部立刻受益。