接口的含义:用于约束类,对象,函数的标准

接口约束对象

  1. interface U {
  2. name: string
  3. age: number
  4. }
  5. let user:U = {
  6. name:"孤风",
  7. age:19
  8. }

接口约束函数

  1. interface U {
  2. name: string,
  3. age: number,
  4. sayHi: () => void
  5. }
  6. let user:U = {
  7. name:"孤风",
  8. age:19,
  9. sayHi(){
  10. console.log('Hi');
  11. }
  12. }
  13. interface Condition {
  14. (n:number): boolean
  15. }
  16. function add(numbers:number[], callBack:Condition){
  17. let sum = 0;
  18. numbers.forEach(v => {
  19. if(callBack(v)){
  20. sum += v;
  21. }
  22. });
  23. return sum
  24. }
  25. let sumAdd = add([2,6,7,89,100], v => v % 2 !== 0);
  26. console.log(sumAdd);

接口的继承

  • 可以通过接口之间的继承,实现多种接口的组合
  • 使用类型别名也可以实现类似的组合效果,需要通过&, 叫做交叉类型
  • 区别就在于: 子接口不能覆盖父接口的成员, 交叉类型会把相同成员的类型进行交叉 ```javascript // interface U { // name:string // }

// interface U1 extends U { // age:number // } //let user:U1{ // name:”古风”, // age:19 // } //可以继承多个 interface U { name:string }

interface U1 { age:number } interface U2 extends U,U1 { hobby:string } let user:U1{ name:”古风”, age:19, hobby:”戏曲” }

  1. <a name="wExvv"></a>
  2. ### readonly 只读修饰符
  3. 使用的只读修饰符,当给一个变量进行赋值之后,该变量就不能更改了
  4. ```javascript
  5. interface U {
  6. readonly id: string
  7. }

类型兼容性

子结构辨型法:目标类型需要某一些特征,赋值的类型只要能满足该特征即可

  • 基本类型: 完全匹配
  • 对象类型: 子结构辨型法

类型断言:数据 as 类型
当使用对象字面量赋值的时候,会进行更加严格的判断

面向对象领域中的接口的语义:表达了某个类是否拥有某种能力
某个类具有某种能力,其实,就是实现了某种接口 implements

类型保护函数

通过调用该函数,会触发TS的类型保护,该函数必须返回boolean

  1. function has(ani: object): ani is U {}

接口和类型别名最大的区别在于 接口可以被类实现,而类型别名不可以
接口可以继承类,表示该类的所有成员都在该接口中。