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,其更加灵活自动的类型合并可应对未知的复杂使用场景。

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
AWSECS:哪种网络模式具有... 使用AWS ECS中的awsvpc网络模式来获得最佳性能。awsvpc网络模式允许ECS任务直接在V...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...