interface 和 type 在 TypeScript 中的区别
1、TypeScript interface 和 type 的介绍
在 TypeScript 中,interface
更偏于一种约束类型,而 type
的作用就是给类型起一个新名字,也就是别名。后来随着 TypeScript 语言的发展,type
被赋予了新的内涵,type
也可以用来定义类型。
约束类型与定义类型,本质都是围绕 “类型” 而产生,所以说interface
和 type
在 TypeScript 中区别不大,但是在细微之处,两者的差别也非常明显,需要开发者仔细的体会。本文主要带领大家领略这种细微差别。
在其他面向对象编码语言中,例如 Java 语言中,interface
用于定义行为,如果一个类实现了某一个interface
则表示该类具有某种行为或者说具有某种能力,例如run
或者fly
,从而可以通过行为来对动物进行划分,看看它到底是走兽还是飞禽。
而type
的作用就是给类型起一个新名字,也就是别名,可以作用于原始值(基本类型),联合类型,元组以及其它任何类型。如下代码所示:
type Second = number; let time: Second = 60; type user = {name:string} type getName = ()=>string type data = [number,string] type numOrFun = Second | getName
注意:起别名不会新建一个类型,它创建了一个新名字来引用那个类型。给基本类型起别名通常没什么用。类型别名常用于联合类型。另外,和接口一样,type 用来描述对象或函数的类型,如下所示:
type User = { name: string age: number }; type SetUser = (name: string, age: number)=>void;
在 ts 编译成 js 后,所有的接口和 type 都会被擦除掉。
2、TypeScript interface 和 type 的区别
2.1、接口可以扩展,但 type 不能 extends 和 implement 。
接口可以扩展,但type
不能extends
和implement
。
不过,type
可以通过交叉类型实现interface
的extends
行为。
interface
可以extends type
,同时type
也可以与interface
类型交叉。
2.1.1、接口扩展
interface Name { name: string; } interface User extends Name { age: number; } let student:User={name:'wang',age:10}
2.1.2、type 交叉
上面的扩展可以用type
交叉类型来实现
type Name = { name: string } type User = Name & { age: number }; let student:User={name:'张三',age:20} console.log(stu)
2.1.3、interface 扩展 type
type Name = { name: string; } interface User extends Name { age: number; } let student:User={name:'张三',age:20}
2.1.4、type 与 interface 交叉
interface Name { name: string; } type User = Name & { age: number; } let student:User={name:'张三',age:20}
2.2、接口可以定义多次,type 不可以定义多次。
接口可以定义多次,并将被视为单个接口(即所有声明属性的合并)。而type
不可以定义多次。
interface User { name: string age: number } interface User { sex: string } let user:User={name:'张三',age:20,sex:'man'}
原文链接:http://www.mybatis.cn/typescript/1992.html
原文地址 www.mybatis.cn
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!