TypeScript:Visitor模式中函数重载出错
我试图创建一个访问者设计模式,但我面临一个编译错误,尽管我花了几个小时试图找到一个解决方案,但我无法解决这个错误 访客界面:TypeScript:Visitor模式中函数重载出错,typescript,interface,overloading,visitor-pattern,Typescript,Interface,Overloading,Visitor Pattern,我试图创建一个访问者设计模式,但我面临一个编译错误,尽管我花了几个小时试图找到一个解决方案,但我无法解决这个错误 访客界面: export interface Visitor { visit(a: A): X; visit(b: B): Y; } 访客实施: export class VisitorImp implements Visitor { visit(a: A): X { return a.getX(); } visit(b: B
export interface Visitor {
visit(a: A): X;
visit(b: B): Y;
}
访客实施:
export class VisitorImp implements Visitor {
visit(a: A): X {
return a.getX();
}
visit(b: B): Y{
return b.getY();
}
}
因此,我有以下编译错误:
Property 'visit' in type 'VisitorImp' is not assignable to the same property in base type 'Visitor'.
Type '(a: A) => X' is not assignable to type '{ (a: A): X; (b: B): Y; }'.
Type 'X' is missing the following properties from type Y
我真的希望有人能在这方面帮助我,因为它现在快把我逼疯了 我还没有测试过,但你可以试试
export interface Visitor {
visit: ((a: A) => X) | ((b: B) => Y);
}
从浏览网站上得到的
编辑:
因此,这似乎不是很容易实现的。这应该可以做到:
interface Visitor {
visit(a: String): Number;
visit(b: Number): String;
}
class VisitorImp implements Visitor {
visit(a: String): Number;
visit(b: Number): String;
visit(a: String | Number): Number | String {
if(a instanceof String) {
return 0;
} else {
return "";
}
}
}
其中字符串/数字是A/B。如图所示。当我使用它时,我有以下错误:
在每个上重复函数实现
:访问(A:A):X{return A.getX()}
更新了我的答案,这能解决问题吗?你的评论很好,非常感谢。不幸的是,正如你所说,这不是一个很好的解决方案。因此,我想我要做的是,通过更改visitor
函数的名称,稍微改变一下访问者模式:visitA(a:a):X
和visitB(b:b):Y