typescript 入门(3)| 青训营笔记

67 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 5 天,继续之前的typescript学习。文章内容包括使用接口抽象不同类的共同特性,以及简单枚举说明。

类与接口

之前的学习中我们可以使用子类来继承父类的属性和方法,但是有时候我们只需要某些特性,这时候再使用继承就显得有些笨重,我们可以使用接口将这些特性抽离出来,这样就可以在不同的类中复用这些特性。提高了面向对象编程的灵活性。

实例说明

如果我们有一个 Car 类和一个 Phone 类,它们都有一个 switchRadio 方法来打开关闭收音机。如果说这时候我们寻找一个 Car 和 Phone 的父类,就显得不合理且笨重,因为这两个类并没有更多共同的特性。这时候我们可以使用接口来抽离这些特性。

//使用接口抽象出特性
interface Radio {
  switchRadio(): void;
}

// interface Battery {
//   checkBatteryStatus(): void;
// }

interface RadioWithBattery extends Radio {
  checkBatteryStatus(): void;
}

class Car implements RadioWithBattery {
  //打开关闭radio
  switchRadio() {}
  //检查电池状态
  checkBatteryStatus() {}
}

class Phone implements RadioWithBattery {
  //打开关闭radio
  switchRadio() {}
  //检查电池状态
  checkBatteryStatus() {}
}

在上述的代码中,Car 类和 Phone 类都有控制收音机、检查电池的方法。这时候我们可以使用接口来抽离这些特性,然后在 Car 类和 Phone 类中实现这些特性。

枚举

为什么要使用枚举

对于枚举,我印象较深的是在编写 unity 的 C#脚本中用到过,当我们使用常量(const)时,有时会遇到一些场景需要限定这个常量的范围,这个时候就可以使用枚举。

枚举的值有两种类型:常量值(constant member)和计算值(computed member)。

代码实例

const enum Direction {
  Up = "UP",
  Down = "Down",
  Left = "Left",
  Right = "Right",
}

console.log(Direction.Down); // down

const value = "Right";
if (value === Direction.Right) {
  console.log("go right...");
}

使用常量枚举(constant member)时,枚举成员会被内联进使用它们的地方,可以提升性能