TypeScript开发者的典型一天:代码、错误与审查

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

早上好,TypeScript:开发者的一天如何开始

\n\n

想象一下:早上9:00。你打开笔记本电脑,泡好咖啡,看到Telegram上同事发来的消息:“嘿,我昨天写了一个函数,但TypeScript报错说类型是unknown。帮帮忙!”。熟悉吗?欢迎来到TypeScript开发者的典型工作日。这不仅仅是写代码——这是在强类型、截止日期和无尽的重构之间保持平衡的艺术。

\n\n

在这篇文章中,我将向你展示TypeScript开发者的真实一天:从早上的站会到晚上的提交。你会看到真实的代码示例、典型问题及其解决方法。我们开始吧!

\n\n

早上:站会和代码审查

\n\n

9:30 — 每日站会

\n\n

与团队的简短会议。你说:“昨天完成了授权模块,今天计划处理API响应的类型定义”。然后立刻听到:“你不想把接口放到单独的文件里吗?我们是有代码规范的”。TypeScript开发者总是想得更远:接口、泛型、工具类型。

\n\n

示例:你们正在讨论服务器响应的类型定义。与其写any,你建议:

\n\n
interface ApiResponse<T> {\n  data: T;\n  error: string | null;\n  status: number;\n}\n\ntype User = {\n  id: string;\n  name: string;\n  email: string;\n};\n\n// 使用\nconst response: ApiResponse<User[]> = await fetchUsers();\n
\n\n

同事们点头——这是正确的方法。TypeScript开发者知道:好的类型定义是成功的一半。

\n\n

10:00 — 代码审查:在错误找到我们之前发现它们

\n\n

站会后,你打开初级开发者的Pull Request。他写了一个验证电子邮件的函数。代码能运行,但TypeScript提示:Type 'string | undefined' is not assignable to type 'string'。你留下评论:

\n\n
// ❌ 问题:未处理 null/undefined\nfunction validateEmail(input: string | null | undefined): boolean {\n  if (!input) return false;\n  const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n  return emailRegex.test(input);\n}\n\n// ✅ 解决方案:使用守卫和可选链\nfunction validateEmail(input: unknown): input is string {\n  return typeof input === 'string' && \n         input.length > 0 && \n         /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(input);\n}\n
\n\n

你解释道:TypeScript开发者总是考虑边界情况。类型定义不是限制,而是安全。

\n\n

中午:编写代码和使用泛型

\n\n

11:30 — 当天主要任务:重构遗留代码

\n\n

你开始处理一个需要重写为TypeScript的旧JavaScript模块。里面有一个函数,接受“任何东西”并返回“任何东西”。经典:

\n\n
// 🚫 旧JS代码\nfunction processData(data) {\n  if (data.type === 'user') {\n    return { id: data.id, name: data.name };\n  }\n  if (data.type === 'order') {\n    return { orderId: data.id, total: data.total };\n  }\n  return null;\n}\n
\n\n

你使用可辨识联合将其转换为强类型代码:

\n\n
// ✅ TypeScript版本\ntype UserData = { type: 'user'; id: string; name: string };\ntype OrderData = { type: 'order'; id: string; total: number };\ntype InputData = UserData | OrderData;\n\ntype ProcessedResult<T> = T extends UserData \n  ? { id: string; name: string }\n  : T extends OrderData \n  ? { orderId: string; total: number }\n  : never;\n\nfunction processData<T extends InputData>(data: T): ProcessedResult<T> {\n  if (data.type === 'user') {\n    return { id: data.id, name: data.name } as ProcessedResult<T>;\n  }\n  return { orderId: data.id, total: data.total } as ProcessedResult<T>;\n}\n
\n\n

现在TypeScript会根据输入数据自动推断出正确的结果类型。同事

博客

书籍推荐