何时用接口的合并? ——扩展库的公共接口(比如为 @auth/core 的 Session 增补字段)是合理用法。除此之外,日常业务里滥用合并,容易踩坑。
两者功能高度重叠,于是问题来了:谁更好?
这篇文章会系统对比 type 与 interface,并解释为什么在大多数场景里,你更应该优先选 type。
让我们直接开始。
它们到底有啥差别?
先看一个最朴素的 “Person” 定义:
type Person = {
name: string
age: number
}
interface Person {
name: string
age: number
}
乍看几乎一样——只不过 type 用 = 赋值出一个“形状”,而 interface 直接声明。
当然,区别不止于此。继续往下拆。
可扩展性(Extensibility)
很多人会说:接口在“可扩展”上是天然赢家,因为它能用 extends 扩展其它接口:
// 接口扩展
interface Job {
job: string
}
interface Person extends Job {
name: string
age: number
}
const person: Person = {
name: 'John',
age: 25,
job: 'Full-Stack Web Developer',
}
但 type 也能扩展——借助交叉类型 & 或联合类型 | 做组合,而这是接口不能直接表达的:
// ✅ 可行:交叉类型拼装
type Person = {
name: string
age: number
} & { job: string }
// ❌ 不可行:interface 不能在声明处用交叉
// interface Person { ... } & { job: string }
结论:如果你偏好“以类型运算搭积木”的风格,type 的表达力更强。
可实现性(Implementation)
在面向对象(OOP)世界,interface 支持被 class 用 implements直接实现,这点与 Java/C# 一致;而 type不能被类直接实现。
// OOP 实现示例
interface Work {
doWork: () =>void
}
class Person implements Work {
name: string
age: number
constructor(name: string, age: number) {
this.name = name
this.age = age
}
doWork() {
console.log('Working...')
}
}
const p = new Person('John', 25)
p.doWork()
结论:如果你大量采用 class + implements 的编码风格,interface 更顺手;否则,type 足够好用。
性能(类型检查速度)
这里说的性能是 TS 编译器的类型检查。随着代码量增长,类型检查耗时会显著升高。 比较结果?没有差别。社区与专家(如 Matt Pocock)已明确说明:**type 与 interface 在类型检查性能上几乎为 0 差异**。
选哪个,不影响编译速度——放心用你喜欢的。
为什么 Interface 可能“埋雷”?
interface 有一个 Type 没有的能力:声明合并(Declaration Merging)。
编译器会把同名接口自动合并:
// 初始声明
interface Person {
name: string
age: number
}
// 追加声明(合并)
interface Person {
gender: string
}
const someone: Person = { name: 'John', age: 25, gender: 'Male' }
好处:无需改动源定义,就能给已有接口加字段。例如给第三方库的接口“加料”,很方便。
坏处:可能带来意料之外的行为:
- 声明顺序优先:后声明覆盖前声明。分散在不同文件/依赖里时,容易出现不可预期的形状。
- 与类的合并不安全:编译器不会替你校验属性初始化,某些情况下可能留下运行时空值风险。
相对地,type是不可再声明的,没有“合并”这一套,因此更直观、更可控。
何时用接口的合并? ——扩展库的公共接口(比如为
@auth/core的Session增补字段)是合理用法。除此之外,日常业务里滥用合并,容易踩坑。
快对照:什么时候用谁?
- 需要 class implements OOP 语义 →
interface - 需要 声明合并(扩展三方库接口) →
interface - 需要 联合/交叉/条件类型 等类型运算,或者更灵活的组合表达 →
type - 追求可维护性、避免隐式变更,不希望同名合并 →
type - 关心编译性能 → 两者无差异,随意
结论
除非你确实需要接口的特定能力(如 OOP implements 或对三方类型做声明合并),否则在大多数日常场景里:
- **优先使用
type**:
表达力强(交叉、联合、条件、映射等)
心智模型简单(没有合并副作用)
与接口在性能上等价
类型系统要的是“可预期”与“可维护”。 在这两点上,type 更少“隐藏魔法”,更能让你的团队远离因合并导致的灰色地带。
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量
77

被折叠的 条评论
为什么被折叠?



