30分钟学会TypeScript:零基础也能上手的实战指南
大家好,我是一个维护过多个开源项目的前端开发者,也写过不少技术文档。今天我想聊聊 TypeScript —— 这个让无数初学者“望而却步”却又不得不学的语言。其实,它没你想象的那么难。
我当初学 TypeScript 的时候,也是一头雾水:明明 JavaScript 能跑得好好的,为啥还要加一堆类型?后来我才明白,类型不是限制,而是保护。就像你在写一本关于区块链的书时,总得先列个目录;或者开发一个爬虫程序前,得清楚目标网站的结构一样,TypeScript 帮你提前把“规矩”定好,避免后期踩坑。
更神奇的是,哪怕你现在在用 Spring Boot 写后端,TypeScript 也能和它完美配合——前后端联调时,接口字段一目了然,再也不用反复问“这个字段到底叫 name 还是 userName?”。
所以,别被名字吓到。接下来这30分钟,我会带你从零搭建环境、理解核心概念,最后亲手写一个能运行的小项目。准备好了吗?我们开始!
第一步:为什么需要 TypeScript?
JavaScript 是一门“灵活”的语言——灵活到你把字符串当成数字用,它也不会立刻报错,而是默默返回 NaN。这种“宽容”在小项目里还好,但一旦项目变大(比如一个抓取多个网站数据的爬虫系统),bug 就会像野草一样疯长。
TypeScript 就是在 JavaScript 的基础上,加上了静态类型检查。你可以把它理解成“带语法检查的 JavaScript”。
举个生活化的例子:
- JavaScript:你写信给朋友,写完就寄出去,等对方收到才发现地址写错了。
- TypeScript:你写信时,邮局工作人员先帮你检查地址格式对不对,有问题当场提醒你改。
而且,TypeScript 最终会被“编译”成纯 JavaScript,浏览器照样能运行——完全兼容现有生态。
第二步:搭建开发环境(5分钟搞定)
要写 TypeScript,你只需要三样东西:
| 工具 | 作用 | 安装方式 |
|---|---|---|
| Node.js | 运行 JavaScript/TypeScript 的环境 | 官网下载(选 LTS 版) |
| npm 或 yarn | 包管理工具(Node 自带 npm) | 安装 Node 后自动可用 |
| 代码编辑器 | 推荐 VS Code(对 TS 支持最好) | 官网下载 |
具体步骤:
安装 Node.js
打开终端(Mac/Linux 用 Terminal,Windows 用 PowerShell 或 CMD),输入:node -v npm -v如果显示版本号(如 v18.17.0),说明已安装。如果没有,请去官网下载安装。
初始化项目
mkdir ts-demo # 创建项目文件夹 cd ts-demo # 进入文件夹 npm init -y # 生成 package.json安装 TypeScript
npm install -D typescript生成配置文件
npx tsc --init这会生成一个
tsconfig.json文件,它是 TypeScript 的“说明书”,告诉编译器怎么工作。
💡 小贴士:如果你看到
tsconfig.json里有一堆注释,别慌!默认配置已经够用了。我们主要关注outDir(输出目录)和rootDir(源码目录)。
创建源码目录
mkdir src echo 'console.log("Hello, TS!")' > src/index.ts编译并运行
npx tsc # 编译 TS 到 JS node dist/index.js # 运行生成的 JS(假设 outDir 设为 "dist")
如果看到 Hello, TS!,恭喜你!环境搭好了。
第三步:核心概念速通(用最简单的例子)
1. 类型标注(Type Annotation)
在变量后面加上冒号和类型,就像给变量“贴标签”:
let name: string = "Alice";
let age: number = 25;
let isStudent: boolean = true;
常见的基本类型:
string:文本number:数字(整数或小数)boolean:真假值null/undefined:空值
✅ 新手注意:TypeScript 通常能自动推断类型。比如
let x = 10;,TS 会自动知道x是number,不用写: number。
2. 数组和对象
数组有两种写法:
let fruits: string[] = ["apple", "banana"];
// 或者
let scores: Array<number> = [90, 85, 95];
对象要用“接口”(Interface)来描述结构:
interface Book {
title: string;
pages: number;
published: boolean;
}
const myBook: Book = {
title: "区块链入门指南",
pages: 200,
published: true
};
3. 函数也有类型!
函数可以标注参数和返回值类型:
function add(a: number, b: number): number {
return a + b;
}
// 如果函数不返回值,用 void
function logMessage(msg: string): void {
console.log(msg);
}
4. 可选属性与联合类型
有时候字段可能不存在?用 ? 表示可选:
interface SpiderConfig {
url: string;
delay?: number; // 可选,单位毫秒
headers?: Record<string, string>;
}
或者一个变量可能是多种类型?用 |(联合类型):
let statusCode: number | string = 200;
statusCode = "404 Not Found"; // 也可以
第四步:动手实战——写一个简易书籍信息爬虫模拟器
虽然真正的爬虫要用 Python 或 Puppeteer,但我们用 TypeScript 模拟一个“假爬虫”来练习类型系统。
需求:
- 模拟从某个网站抓取书籍信息
- 书籍包含:书名、作者、是否涉及区块链
- 输出格式化结果
步骤:
在
src/下新建crawler.ts定义数据结构
// 书籍接口
interface Book {
title: string;
author: string;
tags: string[]; // 比如 ["区块链", "金融"]
}
// 爬虫结果
interface CrawlResult {
books: Book[];
timestamp: Date;
}
- 模拟抓取函数
function fetchBooks(): Book[] {
return [
{
title: "精通区块链开发",
author: "张三",
tags: ["区块链", "智能合约"]
},
{
title: "TypeScript 实战",
author: "李四",
tags: ["前端", "TypeScript"]
}
];
}
- 主逻辑
function runCrawler(): CrawlResult {
const books = fetchBooks();
const timestamp = new Date();
// 过滤出含“区块链”的书
const blockchainBooks = books.filter(book =>
book.tags.includes("区块链")
);
console.log("发现以下区块链相关书籍:");
blockchainBooks.forEach(book => {
console.log(`- 《${book.title}》 by ${book.author}`);
});
return { books, timestamp };
}
// 执行
runCrawler();
- 编译并运行
npx tsc
node dist/crawler.js
你应该会看到:
发现以下区块链相关书籍:
- 《精通区块链开发》 by 张三
🎯 关键点:通过
interface,我们明确了每本书必须有哪些字段。如果有人不小心写了titel(拼错),TypeScript 会在编译时报错,而不是等到用户访问页面才发现问题!
第五步:新手常见问题解答
Q1:TypeScript 和 JavaScript 到底什么关系?
A:TypeScript 是 JavaScript 的超集。所有合法的 JS 代码都是合法的 TS 代码。TS = JS + 类型 + 一些新语法(如 interface、enum)。
Q2:我必须每个变量都写类型吗?
A:不必!TS 有强大的类型推断。只有在 TS 无法确定类型时(比如函数参数、API 返回值),才需要手动标注。
Q3:编译后的 JS 文件要不要提交到 Git?
A:不要! 只提交 .ts 源文件和 tsconfig.json。JS 文件是“产物”,可以在 .gitignore 中忽略 dist/ 或 build/ 目录。
Q4:TypeScript 能用在 React/Vue/Spring Boot 项目中吗?
A:当然!React 和 Vue 都有官方 TS 支持。至于 Spring Boot——虽然它是 Java 框架,但你的前端用 TS 写,通过 REST API 通信,双方用 JSON 格式交换数据,非常清晰。比如 Spring Boot 返回 { "title": "书名" },TS 端用 interface Response { title: string } 对接,绝不会出错。
Q5:报错 “Cannot find module” 怎么办?
A:通常是缺少类型声明文件。比如用 lodash,需要额外安装:
npm install -D @types/lodash
社区为大多数流行库都提供了类型定义(@types/xxx)。
第六步:下一步学习建议
你已经迈出了第一步!接下来可以:
深入学习高级类型
如泛型(Generic)、类型守卫(Type Guard)、映射类型(Mapped Types)。结合框架实践
尝试用 TypeScript 写一个 React 或 Vue 组件,你会发现 props 的类型约束让开发更安心。阅读优质开源项目
比如 VS Code、Deno 都是用 TS 写的,看看大厂怎么组织代码。用 TS 重构旧项目
把你以前写的 JavaScript 小工具改成 TypeScript,体验“有类型”的快乐。
最后的话
我写这篇教程,是因为见过太多初学者被“类型”吓退。其实,TypeScript 不是为了增加复杂度,而是为了减少不确定性。无论你是想开发一个分析区块链数据的工具,还是写一个自动化爬虫,或是和 Spring Boot 后端协作,类型系统都能成为你的“第二双眼睛”。
记住:写代码不是为了机器能运行,而是为了让人类(包括未来的你)能看懂。
现在,打开你的编辑器,新建一个 .ts 文件,敲下第一行代码吧。30分钟后,你会感谢今天的自己。
Happy Coding!

评论 0