SuperAPI AI 工具集

type-vs-interface

通用与其它

查看项目

更新于 10-16 06:45

技能介绍

用途:在 TypeScript 中定义命名类型时,帮助判断该用 type 还是 interface,并指导类型扩展与组合。核心原则是:可被扩展的对象类型用 interface,联合、元组、映射类型及复杂组合用 type。

主要能力:说明两者的共同点(都能定义对象形状、支持泛型、可互相扩展、可被类实现)与差异。interface 支持声明合并,错误提示更友好,且在 .d.ts 中按名称保留;type 支持联合类型、元组、函数类型、映射与条件类型、keyof 等计算类型,但类型别名在错误信息和 .d.ts 中可能被内联展开。

使用方式:定义 API 响应、props 等对象类型时用 interface;定义联合、元组、函数、映射类型时用 type。扩展时 interface 用 extends,type 用交叉 &,两者可混用,例如 interface Dog extends Animal 或 type Cat = Animal & { meows: boolean }。需要声明合并(如扩展库类型)时必须用 interface。

适用场景:定义公共 API 与可扩展对象、编写声明文件、理解库类型定义、在代码库中统一类型风格。

限制与注意:interface 无法表达联合、元组和映射类型;type 不支持声明合并。用交叉类型扩展不兼容属性时可能静默产生不可用类型(如 age 变为 never),而 interface 扩展会给出明确错误。同一代码库内应保持一致。

该技能基于《Effective TypeScript》第 13 条。具体安装与调用方式暂未提供。