~/VibeHandbook
$39

编程语言

typescriptlang.org

TypeScript

是什么

TypeScript 是在 JavaScript 之上叠加了一套静态类型系统的语言。它会编译成普通的 JavaScript,因此凡是 JS 能运行的地方它都能运行——浏览器、Node、Deno、Bun、边缘运行时——同时在代码执行之前就捕获一整类 bug。

优势

  • 静态类型在编译期捕获拼写错误、null 失误和形状不匹配。
  • 出色的编辑器体验:自动补全、内联文档、安全重构。
  • 渐进式采用——你想标注多少类型就标注多少。
  • 前后端使用同一种语言,并拥有庞大的 npm 生态。

权衡取舍

  • 需要一个构建/编译步骤,以及一个待配置的 tsconfig.json
  • 类型系统强大到足以变得相当复杂(泛型、条件类型),可能成为时间黑洞。
  • 类型在运行时被擦除,因此对于不可信的输入你仍需做运行时校验(例如 Zod)。
  • 在各种打包器和运行时之间,配置和工具链频繁变动。

何时选用

任何非平凡的 JavaScript 项目都该选用 TypeScript,尤其是有多名贡献者或生命周期较长的项目。它是现代 Web 应用(React、Next.js、SvelteKit)、Node/边缘后端,以及任何重视重构安全性的项目的默认之选。

与 vibe coding 的契合度

AI 助手在 TypeScript 中如鱼得水,因为类型检查器给了它们——也给了你——一个快速的反馈回路:把编译错误粘贴回去,模型通常能干净地修复它。指挥 AI 时,要求精确的类型而非 any,并在信任边界(API 输入、环境变量)处要求做运行时校验。明确告诉它你的运行时和框架版本,好让生成的 import 和配置相匹配。当类型变得棘手时,要求模型解释推断出的类型,而不是盲目地将其放宽。

type User = { id: number; name: string; email?: string };

function greet(user: User): string {
  return `Hi ${user.name}` + (user.email ? ` <${user.email}>` : "");
}

console.log(greet({ id: 1, name: "Ada" }));