微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TypeScript 中的函数重载错误:访问者模式

如何解决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 举报,一经查实,本站将立刻删除。