指南

什么是TypeScript?非开发者的通俗指南

TypeScript是带有类型的JavaScript。你可以添加标签,说明每个值应该是哪种数据,例如数字、文本或订单列表,TypeScript会在代码运行之前检查是否存在不匹配的情况。TypeScript官网将其描述为“带有类型语法的JavaScript”。在转换为普通JavaScript时,类型会被去除,而转换后的JavaScript可以在任何支持JavaScript的环境中运行。

用AI搭建时,它为什么重要

AI模型编写代码很快,但快速生成的代码也会出错:一个文件中叫customerName的字段,在另一个文件中却叫customer_name;价格以文本而非数字的形式传入;函数调用时缺少某个值。在普通JavaScript中,许多此类错误只有在有人点错按钮时才会暴露。

TypeScript会在编写代码的阶段更早地发现其中许多问题:

  • AI能即时获得反馈。 类型错误会指出具体有问题的那一行,因此智能体可以在你看到之前就修复它。
  • 修改更安全。 重命名一个字段时,TypeScript会标出每一处仍在使用旧名称的地方。
  • 代码本身就能说明意图。 类型记录了函数需要什么输入、返回什么结果,这对你、AI以及之后维护它的任何开发者都有帮助。
  • 编辑器更智能。 自动补全和“跳转到定义”的功能效果更好,因为编辑器知道每个值的类型。

这也是许多AI应用搭建工具默认使用TypeScript的重要原因。

一个日常类比

可以把它想象成一个带标签货位的仓库。每个货位都有标牌:“仅限托盘货物”“冷藏”“最大承重500公斤”。货物送达时,门口的检查员会将货物与标牌进行比对。本应进入干货区的冷冻鱼会在门口就被拦下,而不是等到一周后散发出异味才被发现。

TypeScript就是门口的检查员。类型就是那些标牌。检查发生在货物(即你的代码)投入使用之前。而一切就位之后,标牌就会被取下:运行中的JavaScript里已经没有任何类型。

TypeScript的工作原理

  1. 你(或AI)编写.ts或.tsx文件:即带有类型标签的TypeScript。
  2. 类型检查器读取代码,并在编辑器或构建过程中把不匹配的地方报告为错误。
  3. 构建步骤去除类型,生成普通的JavaScript。
  4. JavaScript在浏览器或服务器(Node.js、Deno、Bun)中运行。

一个重要的结果是:TypeScript检查的是你编写的代码,而不是应用运行时到达的数据。如果外部API返回了意外的内容,除非你添加运行时验证,否则TypeScript无法察觉。

实例:一个预约表单

假设你正在为一家理发店构建预约应用。下面是描述一条预约的类型:

type Booking = {
  id: number;
  customerEmail: string;
  service: "haircut" | "colour" | "blow-dry";
  startsAt: Date;
  price: number;
  notes?: string; // 问号表示可选
};

以及一个计算定金的函数:

function depositFor(booking: Booking): number {
  return booking.price * 0.2;
}

现在看看TypeScript能发现什么。

字段拼写错误。

depositFor({ id: 1, customerEmail: "lena@example.com", service: "haircut",
  startsAt: new Date(), prise: 40 });

TypeScript会报告prise不是已知属性,并且缺少price。在普通JavaScript中,这段代码会悄悄算出一个NaN(非数字)的定金。

类型错误的值。

const booking: Booking = { ...otherFields, price: "40" };

TypeScript会报告字符串不能用于需要数字的地方。没有它时,"40" * 0.2恰好能算出结果,但"40" + 5会得到"405",这种错误会出现在发票上。

不存在的服务项目。

const booking: Booking = { ...otherFields, service: "perm" };

TypeScript会报告"perm"不是允许的服务项目之一。之后如果理发店新增了烫发,你只需把它加入类型定义,TypeScript就会标出每一处需要更新的地方,包括价格表、表单和日历颜色。

它无法发现的问题。 如果预约表单从浏览器向服务器发送price: "40",服务器上的TypeScript在运行时看不到这一点。这就是为什么设计良好的应用还会验证传入的数据,通常借助验证库检查数据结构,并将其转换为正确的Booking。

TypeScript与JavaScript对比

JavaScriptTypeScript
它是什么浏览器运行的语言JavaScript加上类型语法
能否直接在浏览器中运行能需先转换为JavaScript
能否发现类型错误运行时才发现,或根本发现不了编写时即可发现,运行之前
设置无需要构建步骤(通常由Vite或Next.js等工具处理)
适合小型脚本、快速实验会不断增长和变化的应用
文件扩展名.js、.jsx.ts、.tsx

常用术语解释

术语含义
类型(Type)对某个值可以是什么的描述:一个数字、文本,或特定的对象结构。
类型注解(Type annotation)写在代码中的类型标签,例如price: number。
类型推断(Type inference)TypeScript在没有标签的情况下自行推断出类型。
接口 / 类型别名(Interface / type alias)对对象结构的命名描述,例如Booking。
联合类型(Union type)可以是多个选项之一的值,例如"haircut" | "colour"。
可选属性(Optional property)可以缺失的字段,用?标记。
any让某个值跳过类型检查的类型,是一种应谨慎使用的“逃生口”。
类型错误(Type error)TypeScript报告的不匹配问题。
编译 / 转译(Compile / transpile)把TypeScript转换为JavaScript。
.tsx包含JSX的TypeScript文件,用于React应用。
tsconfig.json设置TypeScript对项目进行检查的严格程度的配置文件。
运行时验证(Runtime validation)在应用运行时检查真实传入的数据。

常见错误与误解

  • “TypeScript能让代码没有bug。” 它只能发现数据结构上的不匹配,发现不了错误的逻辑。把2%的费率写成了20%,类型检查照样通过。
  • “类型能保护我免受错误输入的影响。” 类型在运行时会消失。请对来自用户、表单和API的数据进行验证。
  • 到处使用any。 AI遇到卡点时,可能会使用any或// @ts-ignore来压制错误。这是在掩盖问题,而不是解决问题。
  • 因为预览能运行就忽略类型错误。 有些工具仍会运行带有类型错误的代码。这些错误依然是潜伏的bug。
  • “TypeScript更慢。” 类型在运行前就已被去除;实际运行的JavaScript基本相同。
  • “它只适合大团队。” 独立开发者同样受益,尤其是当AI承担了大部分编辑工作时。

向你的AI搭建工具提出什么要求

  • “使用TypeScript并开启严格模式。”
  • “为我们的主要记录(如Customer、Booking、Invoice)定义共享类型,并同时在前端和后端使用。”
  • “不要用any或@ts-ignore来绕过错误;请修复根本问题,并告诉我问题是什么。”
  • “不要只依赖类型,服务器上要验证所有传入的数据。”
  • “在告诉我完成之前,先运行类型检查器并修复所有错误。”
  • “重命名字段时,更新TypeScript标出的每一处。”
  • “用平实的语言解释这个类型错误。”

关于如何检查AI生成的内容,可参阅如何审查AI生成的代码和如何调试AI搭建的应用。

Mythex中的TypeScript

如果你没有特别要求,Mythex的新项目会使用Vite + React + TypeScript + Tailwind。代码编辑器包含语言智能功能,例如针对TypeScript和JavaScript(以及其他语言)的代码补全、诊断和跳转到定义,因此类型错误会直接显示在代码中,而不仅仅出现在预览里。免费版中编辑器为只读,Pro版中可完全编辑。你仍可以在第一条提示中要求其他配置;技术选型方式的文档页面说明了操作方法,代码编辑器文档则介绍编辑器显示的内容。

常见问题

简单来说,什么是TypeScript?

TypeScript是带有类型的JavaScript。你可以标明每个值应该是哪种数据,例如数字、文本或客户记录,TypeScript会在代码运行前检查是否存在不匹配的情况。之后,它会被转换为普通的JavaScript。

TypeScript和JavaScript是不同的语言吗?

TypeScript是JavaScript的超集:即JavaScript加上用于类型的额外语法。TypeScript官网将其描述为“带有类型语法的JavaScript”。当代码被转换为JavaScript以便运行时,类型会被移除。

为什么AI应用搭建工具要使用TypeScript?

类型为AI及其周边工具提供了快速发现错误的方式,例如把文本传给需要数字的地方,或者拼错字段名。错误会在用户遇到之前就显示出来,这让AI生成的代码更容易检查和修改。

TypeScript能让应用没有bug吗?

不能。它能发现一类关于数据结构的错误,但无法检查业务逻辑错误;除非你添加验证,否则它也不会检查运行时从用户或API传来的数据。

TypeScript是谁开发的?

TypeScript是由微软开发的开源语言。它可以在任何能运行JavaScript的环境中使用,包括浏览器、Node.js、Deno和Bun。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)