← 返回文章列表
FIG.03 — ARTICLE SHEET №01 · DOC.2026

TypeScript 类型笔记:先让错误在编译期出现

几个实用类型工具和设计思路,用来减少运行时判断和魔法字符串。

本文目录 · 4 SECTIONS

TypeScript 的价值不只是语法提示,而是把一类错误从运行时挪到编译期。下面几个模式在日常代码里经常用到。

字面量联合类型

用字面量联合代替魔法字符串,拼写错误在编译期就会被发现:

type Status = 'pending' | 'processing' | 'done';

function updateStatus(status: Status) {
  // ...
}

根据联合类型推导对象

需要给每个状态写配置时,可以用 satisfies 保证类型一致:

const statusLabels = {
  pending: '待处理',
  processing: '处理中',
  done: '已完成',
} satisfies Record<Status, string>;

这样新增状态时,漏掉标签的配置会直接报错。

对象键的安全访问

当接口返回的字段可能缺失时,与其到处写 ?.,不如在入口处收敛成默认值:

function withDefaults(raw: Partial<User>): User {
  return {
    name: raw.name ?? 'anonymous',
    role: raw.role ?? 'guest',
    enabled: raw.enabled ?? false,
  };
}

什么时候别过度设计

泛型工具不要为了用而用。类型设计的边界是:

  • 业务字段变化频繁,需要类型约束;
  • 多端共用同一份数据结构,需要单一来源;
  • 调用方数量多,错误成本高。

只在一个文件里用一次的类型,直接写清楚就好。类型和注释一样,维护成本是真实的。