用途:指导在 TypeScript 中于 interface 与 type 别名之间做出选择,目标是更易读的错误信息与更好的编译器性能。
主要规则:对象类型定义用 interface;扩展对象形状用 interface extends;类契约用 interface;联合、元组、原始类型、映射类型、条件类型和函数别名用 type;扩展优先用 interface extends 而非对象交叉类型;属性可能冲突时避免交叉类型。
示例要点:interface User { name: string; };interface Admin extends User { permissions: string[]; };type Status = "pending" | "approved" | "rejected";type Point = [number, number];type Handler = (event: Event) => void。
为何优先 extends:冲突属性会在定义处报错,错误信息更清晰,具名 interface 会被 TypeScript 缓存,而交叉类型可能被重新计算、更难调试。应避免 type Admin = User & { permissions: string[]; },除非确实需要交叉语义。
输出:给出推荐声明形式,并说明理由(对象形状、联合、元组、条件类型、映射类型或扩展),以及是否存在交叉类型风险。参考 TypeScript Handbook 的 Everyday Types、TypeScript Performance Wiki 与 Total TypeScript 关于交叉类型与 interface extends 的对比。限制:资料未提供安装命令、平台或收费信息。