作为一名前端开发,免不了工作中要或多或少的使用ts,除去一些即为复杂的体操和类型转换以外,我们用的最多的可能就是接口(interface)和类型(type)定义
很多不常用ts或者刚使用ts的同学可能会有这样的疑问,type和interface都可以用来描述一个类型,功能上有很多的相似性,但是二者之间有什么区别呢,二者又分别应该在什么场景下使用呢?
今天咱们就来聊聊这两者之间的异同之处
基本定义
首先,看下ts官网对二者的基本定义
- type类型
- interface接口
好像官网对这二者之间的定义也是十分模糊,其实本质就是为了定义和约束数据结构,保证类型的安全和数据结构的复用
相同点和联系
二者都可以用于描述对象类型, 并且定义对象中的属性和类型
两者都支持继承其他的类型或者接口, 通过extends 继承或者&
ts的编译器都会对二者定义的类型进行类型推断
不同点以及使用场景
- interface可以重复进行声明, type定义后不支持重复声明
ps: interface在同一命名空间中多次声明会被合并为同一个接口,并包含定义过的所有属性,type不支持声明合并,重复定义会报错
- interface通过extends来继承接口, type只能通过&来合并从而实现模拟继承的效果
- type的定义更为灵活,不但可以表示对象类型,也可以定义非对象类型, interface只能定义对象类型,但interface可以通过接口来扩展类型
- type定义对象是引用, interface定义对象是定义
- type可以使用key in type等操作符创建映射类型, interface则不支持直接创建映射类型