美文网首页
编写面向对象的TypeScript:抽象

编写面向对象的TypeScript:抽象

作者: real_ting | 来源:发表于2019-03-11 11:37 被阅读0次

原文地址:Write Object-Oriented TypeScript: Abstraction

这是关于如何使用面向对象技术在TypeScript中编程的4部分文章的第2部分。如果您刚刚开始使用TypeScript和WebStorm,请参阅我们关于TypeScript入门的博客文章。

在TypeScript中实现抽象

抽象是对系统中的对象建模的一种方法,该系统在类或类型与继承它的代码之间创建职责分离。正如您将在本文中看到的那样,它也是一种强制执行基于合同的开发概念的方法。开发人员创建一个类型,即类或接口,该类型指定调用代码应该实现的内容,而不是如何实现。因此,定义需要做什么是抽象类型的工作,但实际做这些事情取决于消费类型。从抽象类和接口继承或实现抽象。

例如,一些银行账户是收费的。您可以创建一个定义收费方法的收费接口 。由于不同类型的帐户费用是不一样的,并不能完全适用,所以最好创建一个可以应用于继承层次结构中任何位置的特定类的接口。支票账户可能会收取费用,而它的父母和兄弟,普通银行账户和储蓄账户可能不会。

interface Fee {
  chargeFee(amount: number );
}

// parent BankAccount and sibling SavingsAccount do not implement Fee interface
class BankAccount { ... }
class SavingsAccount extends BankAccount { ... }

// checking implements Fee
class CheckingAccount extends BankAccount implements Fee {
  chargeFee(amount: number) {}
}

子类继承在父类中实现的接口成员,因此如果BusinessChecking帐户继承了CheckingAccount类,那么它将继承该实现。

// BusinessChecking inherits CheckingAccount and therefore Fee
class BusinessChecking extends CheckingAccount { … }

// Code that uses BusinessChecking can call chargeFee
function CalculateMonthlyStatements() {
  let businessChecking = new BusinessChecking();
  businessChecking.chargeFee(100);
}

如果您实现了一个接口,但还没有实现所有成员,WebStorm会通知您,并提供一个快速修复(Alt-Enter),将方法签名插入到类中。从那里,您可以像往常一样填写实现代码。


image

因为抽象意味着分离可能具有模糊边界的职责,有时候,您会发现您在类层次结构的错误级别添加了一个成员​​。也许您已经创建了一个更适合放在父类中的成员,以便让子类继承。在我们的银行业务场景中,这可能是应用于储蓄账户的最小余额,尽管最小余额适用于所有类型的银行账户 - 不仅仅是储蓄。不用担心,WebStorm包含了一个功能,可以把成员拉上来,这样你就可以设计更好的抽象类了。使用您可以在Refactor菜单中找到的Pull Members Up重构,或者在Refactor this ...(Windows上的Ctrl + Alt + Shift + T或Mac上的Ctrl-T)弹出窗口中找到。


oop-pull-members-up.gif

总结

在本文中,我们讨论了什么是抽象,以及如何通过使用WebStorm的抽象类和接口在TypeScript中实现抽象。

上一篇:编写面向对象的TypeScript:继承

相关文章

网友评论

      本文标题:编写面向对象的TypeScript:抽象

      本文链接:https://www.haomeiwen.com/subject/kzrdpqtx.html