TypeScript 中的函数重载错误:访问者模式
Error in functions overload in TypeScript : 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): 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);
}
从略读 this 网站得到。
编辑:
所以看起来这不是很好地实现。这应该可以解决问题:
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 "";
}
}
}
其中 String/Number 是 A/B。如所见 here.
我正在尝试创建访问者设计模式,但我遇到了一个编译错误,尽管我花了很多时间尝试寻找解决方案,但我仍无法解决...
访客界面:
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);
}
从略读 this 网站得到。
编辑:
所以看起来这不是很好地实现。这应该可以解决问题:
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 "";
}
}
}
其中 String/Number 是 A/B。如所见 here.