标准答案
- TypeScript 能在编译阶段发现一部分属性拼错、参数类型错误、空值处理和接口结构不一致问题。
- 它适合约束 API 响应、组件 props、表单模型、状态结构、工具函数和公共 SDK。
- interface 更适合声明可扩展的对象结构,支持同名合并和 extends。
- type 更适合联合类型、交叉类型、条件类型、映射类型和给复杂类型表达式起别名。
- 项目里最重要的是保持一致的类型边界,不要用 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 的绝对优劣,却没有统一项目类型风格。