【TypeScript】对象类型定义(interface 和 type)

发布时间:2026/10/6 13:08:11

【TypeScript】对象类型定义(interface 和 type) 1. 声明合并interface 能合并type 不行同名 interface 会被自动合并成一个。而type是“别名”他是一次性赋值重复声明同名 type 直接报错。// interface两次声明同名编译器自动合并interfaceUser{name:string;}interfaceUser{age:number;}// 最终 User { name: string; age: number }// type重复声明直接报错typeUser{name:string};typeUser{age:number};//报错Duplicate identifier User// type 想合并得用交叉类型 这是创建新类型不是合并typeA{name:string};typeB{age:number};typeUserMergedAB;// { name: string; age: number }interface的合并是「无中生有累加到同一个名字上」特别适合给第三方库/全局对象「渐进式扩展」如给window加属性、给某个库的类型打补丁。type用是「生成第三个新类型」A 和 B 本身不变。type 注意遇到同名但类型冲突的属性会变成never。2. 继承 被类实现interface 原生支持interface可以用extends继承别的 interface也可以用implements被 class 实现。type也能被implements但「继承」得靠交叉类型来模拟没有extends关键字。代码// interface 继承interfaceAnimal{name:string;}interfaceDogextendsAnimal{// 原生 extendsbark():void;}// interface 被 class 实现classMyDogimplementsDog{name旺财;bark(){console.log(汪);}}// type 没有 extends用 模拟继承typeAnimalT{name:string};typeDogTAnimalT{bark():void};// 等价组合但语法不是继承// type 也能被 implements这点它和 interface 一样classCatimplementsDogT{name咪咪;bark(){console.log(喵);}// 字段结构对得上即可}3. type 支持任意类型interface 只支持对象/函数签名type能给任何类型起别名——基本类型、联合、元组、字面量、函数类型都能。而interface的「左边」只能描述对象结构或函数调用签名不能当基本类型别名用。代码// type什么都能别名typeIDstring|number;// 联合typePoint[number,number];// 元组typeStatussuccess|error;// 字面量联合typeCounter(x:number)void;// 函数类型// interface只能写对象/函数签名interfaceObj{x:number;y:number;}interfaceFn{// 调用签名注意没有名字(x:number):void;}// 下面这些 interface 都做不到// interface ID string | number; // 报错// interface Point [number, number]; // 报错「type是类型表达式的别名interface是结构声明」。所以number、string | number这种不是「结构」的东西只能交给type。4. 联合 / 映射 / 条件类型type 全面支持interface 不支持高级类型体操联合、映射、条件只能用type写。interface表达不了这些它只能描述「固定的对象形状」。代码// 联合类型 —— interface 无法表达typeAorB{a:1}|{b:2};// 映射类型 —— 基于已有类型批量改造interface 做不到typePartialT{[PinkeyofT]?:T[P]};// 全部变可选typeReadonlyT{readonly[PinkeyofT]:T[P]};// 条件类型 —— 根据泛型分支产出不同类型typeIsStringTTextendsstring?yes:no;typeR1IsStringstring;// yestypeR2IsStringnumber;// no// interface 想复用 mapped/conditional 的结果只能 extends 一个 typetypeBase{id:number;name:string};interfaceUserextendsBase{// interface 可以 extends typeage:number;}这也是为什么我们在 TS 源码里看到Partial、Pick、Record、ReturnType全是type写的——它们本质是「类型层面的函数计算」而 interface 只是「形状声明」两者不在同一个抽象层级。实战怎么选对外暴露的对象结构库的 API、组件 props、DTO优先interface。声明合并 继承让它能渐进扩展。需要联合 / 元组 / 映射 / 条件类型的场景只能用type。同一个对象结构用哪个都行时团队统一一个即可。区别总结声明合并interface 能合并type 不行。同名 interface 会被自动合并成一个。而type是“别名”他是一次性赋值重复声明同名 type 直接报错。继承 被类实现interface 原生支持。interface可以用extends继承别的 interface也可以用implements被 class 实现。type也能被implements但「继承」得靠交叉类型来模拟没有extends关键字。type 支持任意类型interface 只支持对象/函数签名。type能给任何类型起别名——基本类型、联合、元组、字面量、函数类型都能。而interface的「左边」只能描述对象结构或函数调用签名不能当基本类型别名用。联合 / 映射 / 条件类型type 全面支持interface 不支持。高级类型体操联合、映射、条件只能用type写。interface表达不了这些它只能描述「固定的对象形状」。
延伸阅读

更多相关文章

2026/10/6 13:11:57

AD20使用技巧(持续更新中)

如果帮到你了,麻烦点个赞 1. AD20中不同窗口之间切换 Ctrl Tab 2. PCB镜像翻转 Ctrl F 3. PCB中器件封装镜像 选中封装,按快捷键Ctrl X 4. 选中同一面上的同一网络的导线 鼠标左击选中一小段后,按Tab键 5. 选中一段同一网络相连的…

2026/10/6 13:12:16

MiniMax H3使用免本地部署

最近 AI 视频圈里,MiniMax H3 的热度很高。尤其是 H3 开源之后,很多人第一反应都是:既然模型开源了,是不是普通人也能直接下载安装到电脑上免费生成视频?实际并没有这么简单。如果想自己部署 H3,需要下载模…

2026/10/7 8:15:27

PPA-RTL:当大模型开始真正关心“这段 RTL 综合出来怎么样

最近读到一篇 DAC 2025 的工作 PPA-RTL。我觉得它有意思的地方,不是又把 RTL 生成准确率往上推了一点,而是终于把一个更“硬件工程”的问题摆到了模型面前:代码写对之后,功耗、性能、面积怎么办? 论文信息 论文&#x…

2026/10/7 8:15:26

MCU 中的统一地址编址:从地址空间到总线与地址译码

MCU 中的统一地址编址:从地址空间到总线与地址译码1.引言2.什么是统一地址编址3.统一编址不等于所有硬件都是内存4.为什么外设寄存器可以像内存一样访问5.统一编址和独立编址6.CPU 是怎么找到外设的7.什么是总线7.1 地址总线7.2 数据总线7.3 控制总线8.地址译码器9.…

2026/10/7 8:10:26

临安隐形矫正选择先对比方案费用

有牙齿矫正需求的临安本地用户,面对不同口腔机构往往会陷入选择困惑,在考虑隐形矫正时,除了对比方案和费用,机构的专业资质、医生团队配置也是核心参考维度,本文结合本地机构情况梳理相关参考信息。机构资质与团队背景…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

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

2026/10/7 1:05:03

ESP32免重刷固件:浏览器直接修改NVS键值实现WiFi配置更新

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

2026/10/7 1:05:03

SAP HANA查询结果导出CSV:避开乱码、性能与权限的实用指南

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

2026/10/7 1:05:03

数字后端Placement阶段Density与Congestion控制实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑