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