TypeScript 灵魂拷问:type 和 interface 到底怎么选?
很多同学在写 TS 时总会纠结定义对象结构到底用type还是interface面试也总被问到它们的区别。其实答案不是一句“都能用”那么简单而是藏在真实的开发场景里。今天我们就用实战代码 踩坑经验把这个问题彻底讲透让你以后再也不用纠结。一、它们的共同起点都能定义对象结构先看一段最熟悉的代码interface User { name: string; age: number; avatarUrl: string; } type UserType { name: string; age: number; avatarUrl: string; }; const u1: User { name: 张三, age: 18, avatarUrl: https://example.com/avatar.jpg }; const u2: UserType { name: 李四, age: 20, avatarUrl: https://example.com/avatar.jpg };你会发现在这个层面interface和type几乎可以无缝互换。它们都可以约束对象、变量用于函数参数和返回值这才是最迷惑人的地方——如果只是定义个简单的对象用谁都行。真正的区别藏在“变化”里。二、第一个分歧接口可以声明合并type 不行这是面试几乎必问的点。接口有一个非常“动态”的特性同名接口会自动合并。interface Animal { name: string; } // 其他地方甚至另一个文件里 interface Animal { age: number; } const dog: Animal { name: 三寸钉, age: 2 }; // 完全合法这种“声明合并”在做第三方库的类型扩充时特别有用。比如你想给 Vue 的组件实例上加一个自定义属性就可以利用这个特性。而type是静态的别名绝对不能重名type AnimalType { name: string }; // ❌ 报错标识符“AnimalType”重复 type AnimalType { age: number };说白了interface是开放的type是封闭的。记住这个特性在需要扩展第三方类型的时候你会感谢它。三、第二个分歧继承方式不一样面向对象里“继承”是复用结构的重要手段。两者都能实现但语法和组合能力不同。interface用extends关键字符合经典的 OOP 直觉interface Person { name: string; } interface Employee extends Person { job: string; } const e1: Employee { name: cjz, job: 字节Agent开发工程师 };type则用交叉类型来实现类似继承type PersonType { name: string }; type EmployeeType PersonType { job: string }; const e2: EmployeeType { name: lg, job: 大厂 };从结果看似乎一样但当类型复杂时的能力更强——它能一次性组合多个类型包括联合类型、函数类型等而extends只能继承静态已知的结构。四、最核心的差异type 能描述“非对象”类型这是type的主场。很多情况下我们要定义的根本不是一个对象// 联合类型 type ID string | number; // 元组类型 type Point [number, number]; // 函数签名更简洁 type AddType (a: number, b: number) number;你没办法用interface直接定义string | number这种联合类型因为接口只能表达对象形状。你可能会想尝试// ❌ 语法错误 interface ID string | number;所以当你需要一个灵活的、跨类型的别名时请直接选type。五、函数类型表面相似实则各有优势两者都可以定义函数类型// interface 写法像一个对象里藏了个调用签名 interface AddFn { (a: number, b: number): number; } // type 写法更像个箭头函数直观 type AddType (a: number, b: number) number; const add1: AddFn (x, y) x y;初看只是语法糖的区别但type在描述函数重载和组合函数类型时配合条件类型、泛型会更加灵活。而interface定义函数的写法其实更贴合 JS 里“函数也是对象”的原始设计——你可以在签名旁边再挂载一些属性。不过日常开发中绝大多数场景用type定义函数更简洁。一个朴素的经验法则单看函数用type涉及可调用对象的完整描述考虑interface。六、实战选型别争了看场景技巧interface 是给“协议”用的type 是给“数据”用的。在实际的 React/Vue 开发中最能体现这个原则。看看下面这个 React 组件// 定义一个实体的接口将来可能扩展、可能让别的模块实现 interface User { name: string; age: number; avatarUrl: string; } // 组件的 Props 也是一个“契约” interface UserCardProps { user: User; onEdit: (id: number) void; } const UserCard: React.FCUserCardProps ({ user, onEdit }) { return ( div h1User Card/h1 /div ); };在这里User和UserCardProps都是明确的“协议”——它们描述了组件和外界交互的形状。用interface来定义可以享受声明合并的便利比如未来要给User加字段也能清晰地表达“我是接口”。反观一些临时的工具类型、数据转换类型直接用type快速组合typescripttype UserBrief PickUser, name | avatarUrl; type Status loading | success | error;七、总结让我们把核心区别浓缩成一张表特性interfacetype描述对象结构✅✅声明合并同名自动合并✅❌同名报错继承方式extends交叉类型定义联合/元组等非对象类型❌✅函数类型定义调用签名箭头语法更简洁适用场景契约、组件 Props、可扩展的类型工具类型、联合类型、临时别名最重要的建议其实只有一句话定义对象形状用interface除非你需要联合类型或复杂映射——那时再用type。这样选既符合 TypeScript 的 OOP 基因也能在大型项目中保持类型的一致性和可扩展性。好了下次面试官再问你这个问题相信你已经胸有成竹。记住技术选型没有绝对的对错关键是让你的代码意图更清晰让协作的人少一些困惑。

相关新闻

TVA-具身智能最新进展(3):主动视觉感知提升实时性

TVA-具身智能最新进展(3):主动视觉感知提升实时性

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它融合深度强化学习(DRL)、卷积神…

2026/10/18 4:01:03 阅读更多 →
王虹、邓煜、张益唐、韦东奕四位数学家的‌核心成果时间线对照表

王虹、邓煜、张益唐、韦东奕四位数学家的‌核心成果时间线对照表

以下是王虹、邓煜、张益唐、韦东奕四位数学家的核心成果时间线对照表,完整覆盖他们从学术起步到取得里程碑成果的关键节点,清晰呈现不同成长路径的节奏差异。 一、四位数学家核心成果时间线对照表 时间 节点 王虹(调和分析/几何测度论&…

2026/10/18 4:02:08 阅读更多 →
3分钟把手机投到电脑上:scrcpy 投屏实战指南

3分钟把手机投到电脑上:scrcpy 投屏实战指南

3分钟把手机投到电脑上:scrcpy 投屏实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 开会要当场演示 App,一群人只能围着一块小屏凑脑袋看;做教程…

2026/10/18 4:02:16 阅读更多 →

最新新闻

电商智能体实战:打通客服与导购,从架构到落地全解析

电商智能体实战:打通客服与导购,从架构到落地全解析

做了快一年的电商智能体项目,最大的感悟是:"客服导购"绝对不是把两套话术拼在一起那么简单。我们团队接到的第一个需求特别朴素——"能不能让客服机器人别那么蠢,至少会查个订单、懂点商品"。结果真正做起来才发现&#…

2026/10/19 3:44:17 阅读更多 →
AI文档审核系统如何把关无组织排放检测报告?

AI文档审核系统如何把关无组织排放检测报告?

做环保检测这行这么多年,最让人头大的往往不是采样,也不是化验,而是那一摞摞送审的无组织排放检测报告。每份报告里几十上百个监测点位,颗粒物、非甲烷总烃、苯系物各项浓度,每一项都要跟现行标准核对排放限值、采样时…

2026/10/19 3:44:17 阅读更多 →
生物深度学习实战:从序列数据到模型评估的完整指南

生物深度学习实战:从序列数据到模型评估的完整指南

1. 先想清楚要解决什么问题:从序列到表型的任务清单标题写着“生物深度学习”,但它根本不是一门“输入数据、跑个模型、输出结果”的单向流水线,而是先要把生物问题翻译成机器学习问题,再反过来用模型结果去解释生物现象。很多人一…

2026/10/19 3:44:17 阅读更多 →
从零搭建企业AI员工:智能体架构、ReAct循环与工具调用全解析

从零搭建企业AI员工:智能体架构、ReAct循环与工具调用全解析

我一直觉得,企业级智能体这件事,最大的误解就是把聊天机器人当成AI员工。聊天机器人只是“能说话”,AI员工是“能干活”。它要能理解任务、拆解步骤、调用内部系统、拿回结果、再把结果讲成人话,最好还能在出错时自己纠偏。OpenCl…

2026/10/19 3:44:17 阅读更多 →
反钓鱼安全运营:从人因风险建模到持续干预机制

反钓鱼安全运营:从人因风险建模到持续干预机制

做安全运营的人,这两年普遍都有一种被“追着打”的感觉。钓鱼攻击激增已经不再只是新闻里的宏观数字,它会非常具体地落在某一次告警里:比如某个周一下午,我们团队里的研发同事收到一封“绩效确认附件”的邮件,发件人名…

2026/10/19 3:44:17 阅读更多 →
VLAN划分与配置实战:从广播域到Trunk排障

VLAN划分与配置实战:从广播域到Trunk排障

做了几年网络相关项目,我最大的感觉是:很多听起来不复杂的问题,最后都卡在“VLAN划分与配置”上。办公楼上不了网、会议室网络忽快忽慢、跨楼层访问服务器超时,十有八九都跟广播域没拆干净、标签没配对、trunk没放通有关系。VLAN这…

2026/10/19 3:43:17 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →