如何解决TypeScript 中的函数重载错误:访问者模式
我正在尝试创建一个访问者设计模式,但我遇到了一个编译错误,尽管我花了好几个小时试图找到一个解决方案,但我还是无法解决这个错误......
访客界面:
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 "";
}
}
}
其中字符串/数字是 A/B。如所见here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。