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.