这是我参与「第五届青训营」伴学笔记创作活动的第 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)时,枚举成员会被内联进使用它们的地方,可以提升性能。