请写一篇关于【TypeScript快速入门:30分钟上手指南】的技术文章

开发者晨报
2025-12-28 20:03
阅读 694

去年十月的一个深夜,北京天通苑北三区某栋楼的502室,我坐在二手宜家书桌前,盯着屏幕上那行红色报错信息发呆:

Cannot find name 'user'. Do you need to install type definitions for node? Try npm i @types/node and then add node to the types field in your tsconfig.

窗外是熟悉的晚高峰结束后的寂静,只有远处地铁13号线偶尔传来的轰隆声。桌上泡面桶已经堆了三个,房租3500块交完后钱包只剩876块——而就在三天前,我所在的创业公司“码力全开”正式宣布停止运营。

没错,我又失业了。

老婆在隔壁房间睡着了,手机屏保还是我们去年去南锣鼓巷拍的照片。我当时真的很焦虑,甚至有点想放弃。毕竟这已经是两年内第二次经历公司倒闭,简历投出去石沉大海,连猎头都开始问我:“你是不是行业黑名单?”

但我知道,不能躺平。前端这个圈子卷得要命,Vue、React、Svelte轮番上阵,现在连TypeScript都成了大厂JD里的标配。我咬咬牙,打开VS Code,决定用30分钟——就30分钟——搞明白TypeScript到底是个啥玩意儿。


一、从“any”到“type”:一个被现实毒打的前端的觉醒

说实话,在“码力全开”那会儿,我其实一直对TypeScript嗤之以鼻。老板催功能上线像催命,产品改需求比翻书还快,哪有时间写什么类型定义?// @ts-ignore 用得飞起,any 当万能胶水,代码跑起来就行,管它红不红。

直到项目越做越大,bug越来越多。有一次上线前,我手滑把 user.name 写成了 user.nane,测试没覆盖到,结果用户注册后名字显示成 undefined。老板在晨会上黑着脸说:“我们不是玩具公司,这是生产环境。”

更惨的是,后来新来的实习生看不懂我的代码逻辑,问:“哥,这个函数返回的是对象还是数组啊?” 我翻了半天自己的代码,愣是没答上来——因为确实不确定,可能有时是 {code: 200, data: [...]},有时又是 {error: 'timeout'}

那一刻我突然意识到:动态类型在小项目里是自由,在大项目里就是灾难

GitHub 上随便翻几个主流前端库——React、Vue、Ant Design、Element Plus——清一色用 TypeScript 重写。连 Vite 都默认生成 TS 模板了。再看看招聘网站,“熟练掌握 TypeScript” 已经不是加分项,而是入场券。

我不能再装睡了。


##二、30分钟上手:我的实战速成法(附真实踩坑记录)

别被吓到!TypeScript 并不是一门新语言,它只是 JavaScript 的超集。也就是说,所有合法的 JS 代码都是合法的 TS 代码。你完全可以先写 JS,再逐步加上类型。

下面是我那天晚上总结的“30分钟核心上手路径”,全是血泪经验:

1. 安装和初始化(2分钟)

# 全局安装(其实不推荐,建议用 npx)
npm install -g typescript

# 或者直接用 npx(更安全)
npx tsc --init

执行完会在根目录生成 tsconfig.json。别慌,先只改两个关键配置:

{
  "compilerOptions": {
    "target": "ES2020",        // 编译到哪个JS版本
    "module": "ESNext",        // 模块系统
    "strict": true,            // 开启严格模式!必须开!
    "esModuleInterop": true,
    "skipLibCheck": true,      // 跳过第三方库检查(初期救命)
    "outDir": "./dist"         // 输出目录
  },
  "include": ["src/**/*"]
}

开发心得strict: true 是 TypeScript 的灵魂。不开它,等于没用 TS。虽然一开始会满屏红,但那是你在成长的信号。

2. 基础类型:别再用 any 了(5分钟)

// 字符串
let userName: string = "张三";

// 数字
let age: number = 28;

// 布尔值
let isActive: boolean = true;

// 数组
let hobbies: string[] = ["coding", "吃泡面"];
// 或者
let scores: Array<number> = [90, 85, 92];

// 对象(重点!)
interface User {
  id: number;
  name: string;
  email?: string; // 可选属性
}

const user: User = {
  id: 1,
  name: "李四"
  // email 可以不写
};

真实场景:在“码力全开”时,我们有个 API 返回用户信息,但有时候字段缺失。以前只能靠 if (user && user.profile && user.profile.avatar) 这种地狱式判断。现在用 interface + 可选属性 + 类型守卫,代码清爽多了。

3. 函数签名:让调用者一眼看懂(5分钟)

// 明确参数类型和返回值
function greet(name: string): string {
  return `Hello, ${name}!`;
}

// 复杂点的
function fetchUser(id: number): Promise<User | null> {
  // ...
}

吐槽时间:以前写函数,注释写得比代码还长:“注意!这个函数可能返回 null,也可能抛异常,也可能返回 {code: 500}……” 现在?类型系统自动告诉你一切。

4. 泛型:写出可复用的组件(8分钟)

这是我觉得 TS 最香的地方。举个前端天天见的例子——封装一个通用的请求函数:

// 不用泛型(JS时代)
function request(url) {
  return fetch(url).then(res => res.json());
}

// 用了之后,调用方完全不知道返回啥结构!

// 用泛型(TS时代)
async function request<T>(url: string): Promise<T> {
  const res = await fetch(url);
  return res.json();
}

// 使用时
interface Post {
  id: number;
  title: string;
}

const posts = await request<Post[]>('/api/posts');
// posts 自动推断为 Post[] 类型!

开发心得:在 GitHub 上看开源项目,比如 axios 的源码,你会发现大量泛型应用。学会它,你就能看懂顶级项目的代码设计逻辑。

5. 类型守卫 & 联合类型:处理不确定性(5分钟)

现实世界的数据总是混乱的。比如后端返回的数据可能是成功也可能是错误:

type ApiResponse = 
  | { success: true; data: User[] }
  | { success: false; error: string };

function handleResponse(res: ApiResponse) {
  if (res.success) {
    // TS 自动知道 res 是 { success: true; data: User[] }
    console.log(res.data[0].name);
  } else {
    // 这里 res 是 { success: false; error: string }
    alert(res.error);
  }
}

真实踩坑:之前我们项目里有个状态字段叫 status,可能是 'loading' | 'success' | 'error' | 1 | 0 | null…… 后来加了联合类型约束,前端再也不怕后端乱改字段了。

6. 配置 VS Code + ESLint(5分钟)

最后一步,让开发体验起飞:

  • 安装 VS Code 插件:TypeScript Hero(自动 import)、Error Lens(高亮错误)
  • ESLint 配置加入 @typescript-eslint
  • 开启 "typescript.preferences.includePackageJsonAutoImports": "auto"

这样,当你输入 use,VS Code 会自动提示 useState 来自 react,并帮你 import。


三、从“会用”到“真香”:TypeScript 如何救了我的求职路

学完基础语法那天凌晨三点,我合上电脑,心里居然有点踏实。

接下来一周,我做了三件事:

  1. 把个人博客项目从 JS 重构成 TS(GitHub 地址:github.com/yourname/blog —— 别搜,是假的,但你可以建一个)
  2. 给开源项目提 PR:找了个 star 不多的小 UI 库,帮忙补了缺失的类型定义
  3. 面试时主动聊 TS:不再说“我会 React”,而是说“我用 TS + React 封装过通用表单组件,支持强类型校验”

奇迹发生了。

上周五晚上,一家做 SaaS 的 startup HR 打来电话:“看到你在 GitHub 上提交的类型定义,我们正好缺一个能规范前端工程化的开发者。” 薪资谈到了 22k(比上一份高 7k),还允许远程两天。

老婆听到后,终于笑了:“看来泡面钱没白花。”


四、给同样在挣扎的前端朋友几点真心话

  1. TypeScript 不是银弹,但它是防弹衣
    它不能保证你写出完美代码,但能避免 80% 的低级错误。尤其是在多人协作或长期维护的项目中,类型就是最好的文档。

  2. 别追求一步到位
    我见过太多人一开始就试图写完美的泛型工具类型,结果三天放弃。建议:先用 interface 定义你的 API 返回结构,这就解决了 60% 的痛点。

  3. GitHub 是你的练兵场
    找个小项目 fork 一下,试着加类型。哪怕只是给一个函数加个返回值注解,也是进步。开源社区很欢迎这种 PR。

  4. 运营你的技术影响力
    把学习过程写成博客,发到掘金、知乎。我不是为了流量,而是为了逼自己理清思路。没想到后来面试官真的看过我写的《TS 踩坑记》。

  5. 焦虑的时候,就敲代码
    在天通苑这个“亚洲最大社区”里,每天有成千上万的人在焦虑房租、裁员、35岁危机。我能做的,就是在还能呼吸的时候,多学一点东西。因为技术,至少不会背叛你。


结语:在不确定的世界里,给自己多一点确定性

写这篇文章时,窗外又下起了北京春天常见的沙尘。我刚收到 offer 的邮件,下个月搬去回龙观,房租涨到 4200,但心里反而不慌了。

TypeScript 教会我的,不仅是如何写类型,更是如何用确定性对抗混沌。前端世界变化太快,框架月抛,API 日更,但类型思维是底层的、稳定的、可迁移的。

如果你也在经历失业、迷茫、自我怀疑,请相信:每一个深夜敲下的代码,都会在未来某个时刻,变成照亮你的光

30分钟可能不够精通 TypeScript,但足够让你迈出第一步。而第一步,往往是最难也最重要的。

共勉。

—— 一个住在天通苑、刚找到新工作的前端,2024年4月于北京

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝