【发布时间】:2014-07-18 04:16:05
【问题描述】:
我正在尝试通过使用 TypeScript 编写代码来遵循 C# 设计模式书。也许这是我的第一个错误,但这是我喜欢学习语言的一种方式。
TypeScript 不支持类的 abstract 关键字,所以我试图模拟它。也许这是我的第二个错误。
这是我的接口和类:
interface IEngine {
getSize(): number;
getTurbo(): boolean;
}
class AbstractEngine implements IEngine {
constructor(private size: number, private turbo: boolean) {
throw "Abstract class";
}
public getSize(): number {
return this.size;
}
public getTurbo(): boolean {
return this.turbo;
}
public toString(): string {
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec(this.constructor.toString());
var className = (results && results.length > 1) ? results[1] : '';
return className + " (" + this.size + ")";
}
}
class StandardEngine extends AbstractEngine {
constructor(size: number) {
// not turbo charged
super(size, false);
}
}
当尝试使用 new AbstractEngine(1, true) 实例化 AbstractEngine 时,我得到了预期的“抽象类”错误。
在尝试使用 new StandardEngine(9000) 实例化 StandardEngine 时,我还收到“抽象类”错误。
有没有办法可以在 TypeScript 中模拟一个抽象类,它无法被实例化,但仍然在扩展它的类中调用 super?那么模拟抽象方法呢,我可以保护它们并且仍然调用超级方法吗?
【问题讨论】:
标签: oop design-patterns typescript