TypeScript 赢了。这究竟为我们带来了什么。

已经没有人再争论是否要使用 TypeScript 了。新项目默认都会使用它。争论已经结束。

其真正的价值不仅仅在于捕捉拼写错误,远不止于此。

函数签名充当了文档的作用。它永远不会过时。如果代码发生了变化,编译器会让构建失败。

看这个函数:

function scheduleReminder(
  userId: string,
  at: Date,
  channel: "email" | "push" | "sms",
): Promise<ReminderId>;

你确切地知道如何调用它。你知道它需要什么以及它返回什么。你知道 channel 必须是三个特定字符串中的一个。

如果你稍后添加了 "slack" 选项,编译器会强制你更新代码的每一个部分。而注释只会逐渐失效并误导你。

在无类型的代码中,重命名一个字段会让人感到恐惧。你只能搜索字符串并祈祷一切顺利。在 TypeScript 中,你只需更改类型。编译器会为你列出所有出错的地方,形成一份待办清单。重构变得安全了。

类型也有助于 AI。

AI 模型在 JavaScript 中只能猜测代码的结构。而在 TypeScript 中,类型就是规范。AI 知道什么是允许的。错误会以报错的形式出现,而不是导致生产环境崩溃。

类型充当了护栏。它们让你能够充满信心地使用 AI 生成的代码,而无需逐行手动检查。

遵循以下规则编写更好的类型:

• 使用联合类型(unions)而不是多个布尔值。像 "loading" | "error" | "ready" 这样的状态比三个独立的标志位更好。 • 为你的领域类型命名。使用 type Cents = number 来表达意图。 • 避免使用 any。改用 unknown 并进行类型收窄(narrowing)。 • 让类型推断(inference)发挥作用。在函数签名等边界处进行注解,但让其余部分自然流动。

TypeScript 将代码库变成了由强制执行的契约组成的集合。这些契约实现了无畏的重构和可靠的 AI 辅助。

我们最初使用类型是为了减少 Bug。我们现在持续使用它们,是因为它们是其他一切的基础。

Source: https://dev.to/parsajiravand/typescript-won-heres-what-that-actually-bought-us-53lo