标准答案

  1. TypeScript 能在编译阶段发现一部分属性拼错、参数类型错误、空值处理和接口结构不一致问题。
  2. 它适合约束 API 响应、组件 props、表单模型、状态结构、工具函数和公共 SDK。
  3. interface 更适合声明可扩展的对象结构,支持同名合并和 extends。
  4. type 更适合联合类型、交叉类型、条件类型、映射类型和给复杂类型表达式起别名。
  5. 项目里最重要的是保持一致的类型边界,不要用 any 绕过关键业务数据。

题目解析

TypeScript 的价值不只是补全和提示,更重要的是把接口数据、组件入参、状态流转和重构影响范围显式写出来。多人协作时,类型就是一层可执行的约定。

type 和 interface 的取舍不要背成绝对规则。对象结构、公开 API、可扩展声明用 interface 很自然;联合类型、工具类型组合、复杂类型表达式用 type 更顺手。

类型系统只在编译阶段工作。接口返回、localStorage、URL 参数和用户输入仍然是不可信数据,关键路径要配合运行时校验或兜底逻辑。

代码示例

对象 props 可以用 interface,联合状态更适合 type。

TypeScript
interface UserCardProps {
  id: string
  name: string
}

type RequestState =
  | { status: 'loading' }
  | { status: 'success'; data: UserCardProps }
  | { status: 'error'; message: string }

常见误区

  • 把 TypeScript 当成运行时校验,认为接口返回错了也一定能被 TS 拦住。
  • 所有复杂类型都写成 any,失去类型系统价值。
  • 纠结 type 和 interface 的绝对优劣,却没有统一项目类型风格。

作者信息