TS中 type|interface的区别
创始人
2024-06-02 17:29:09
0

1. type:创建类型别名,不仅可以用来表示基本类型,还可以表示对象类型,联合类型,元组和交集

type username = string //基本类型
type userId = string | number //联合类型
type arr = number[]
​
//对象类型
type Person = {id:userIdname:userNameage:number
}
//泛型
type Tree = { value:T };
​
const user: Person = {id :'fd',
}

2. 接口是命名数据结构(例如对象)的另一种方法;与Type不同,Interface仅限于描述对象类型

接口的声明语法也不同类型别名的生命语法,让我们将上面的类型别名 Person 重写为接口声明:

interface Person{id:userIdname:userNameage:number
}

两种相似之处:

都可以描述Object 和Function,但语法不同

type:type Point = {x: number;y: number;
};
​
type SetPoint = (x: number, y: number) => void;
interfaceinterface Point {x: number;y: number;
}
​
interface SetPoint {(x: number, y: number): void;
}

二者都可以被继承

interfacetype 都可以继承。

另一个值得注意的是,接口和类型别名并不互斥。类型别名可以继承接口,反之亦然。只是在实现形式上,稍微有些差别。

二者区别

  1. type可以定义基本类型别名, 但是interface无法定义

  1. type可以声明联合类型, 但是interface无法定义

  1. type可以声明 元组类型:但是interface无法定义

  1. interface 可以声明合并,但是type无法定义,用type会报错 如果你多次声明一个同名的接口,TypeScript 会将它们合并到一个声明中,并将它们视为一个接口。这称为声明合并

总结

官方推荐用 interface,其他无法满足需求的情况下用 type

但其实,因为 联合类型 和 交叉类型 是很常用的,所以避免不了大量使用 type 的场景,一些复杂类型也需要通过组装后形成类型别名来使用。

所以,如果想保持代码统一,还是可选择使用 type。通过上面的对比,类型别名 其实可涵盖 interface 的大部分场景。

对于 React 组件中 propsstate,使用 type ,这样能够保证使用组件的地方不能随意在上面添加属性。如果有自定义需求,可通过 HOC二次封装。

编写三方库时使用interface,其更加灵活自动的类型合并可应对未知的复杂使用场景。

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...