TS中接口的概念
引言
- 接口的基本概念就是用来描述数据的形状(对象、类、函数)
- 接口中的东西都是抽象的,没有具体实现
示例

可能有人会问,这里使用type也可以,那么我们就来总结一下type和interface的区别
- 都能产生类型
- type可以使用联合类型,而interface不可以
- type不能被继承和实现,interface可以被继承、实现、扩展
- interface中不能用in操作符,type是可以的
- type不能重复定义和interface可以重复定义并合并
对象的赋值操作具备兼容性的特点

- 这种写法是会报错,因为你定义了一个类型IFruit,那么fruit值也必须满足这个类型
猥琐的用一个变量来进行赋值

- 这种就是赋值操作,通过兼容性赋值没有声明的属性,但是这种写法,fruit上你是取不到taste属性的,这是从安全性的角度上考虑的
那么我们还有什么方法可以把f对象赋上去呢?

还有第三种方法

我们还可以再加一个接口,我们刚才说过同名接口可以合并,上面的全局的,下面的是我们文件自己的,不跟全局的混在一起

- 可以通过同名接口可以合并的特性来实现属性的拓展,一般在写声明文件的时候,希望扩展的时候可以这样操作
接口还可以拓展

我们还有一种非常快速的方法
- 因为我们不可能去一个一个的往上加,如果有非常多的扩展属性,那估计写到天亮了

总结扩展的方法
- 借助赋值兼容性问题
- 断言的方式
- 加? 号的方式
- extend扩展的方式
可索引类型

- 我们可以通过索引接口定义数组和数字映射表
- 如果是字符串数字,它也可以识别成数字
原则
- 能使用type就用type,不能用type的时候考虑interface
type和interface处理函数的区别


混合接口

用接口描述类

- 用接口描述类上的方法,如果是eat():void,那么描述的就是原型上的
- 如果是eat:()=>void,那么描述的是实例上的
- 但是ts中识别不了是在类上的还是实例上的
- 接口可以限制类中有哪些属性或方法
类还可以被接口继承

抽象类
- abstract关键字声明
- 不能被实例化
- 只能被继承
- 可以在父类中定义抽象方法,子类必须要实现,如果是具象方法,子类可实现可不实现

抽象类和接口的区别
- 如果用接口来描述类,那接口定义的属性或方法都是抽象的,子类都要实现
- 而抽象类中只有定义了抽象方法或属性,子类才必须要实现,具象属性和方法子类就可实现可不实现