合并来自不同类的switch语句

时间:2018-04-20 05:36:05

标签: javascript typescript merge

有没有办法将来自2个不同类的switch语句组合起来,但是将相同的函数名称合并为1,而不是覆盖函数并手动编写switch语句,或以某种方式复制粘贴来自ClassB的switch并将其粘贴到ClassA的switch之后?

A类:

protected casesHandler(): void
    {
        switch (case){
            case 0:
                break;
            default:
                super.caseHandler();
        }
    }

B组:

protected casesHandler(): void
    {
        switch (case){
            case 1:
                break;
            default:
                super.caseHandler();
        }
    }
欲望结果:

protected casesHandler(): void
    {
        switch (case){
            case 0:
                break;
            case 1:
                break;
            default:
                super.caseHandler();
        }
    }

试图避免:

protected casesHandler(): void
    {
        switch (case){
            case 0:
                break;
            default:
                super.caseHandler();
        }

        switch (case){
            case 1:
                break;
            default:
                super.caseHandler();
        }
    }

2 个答案:

答案 0 :(得分:0)

没有办法做到这一点,但即使你能以某种方式做到这一点,它看起来也不像是干净的代码。

您可以将此逻辑分离为一个简单的函数并导入到您需要的位置:

export const casesHandler = (case: number): void => {
  switch (case) {
    case 0:
      // code
    case 1:
      // code
    default:
      // code
  }
}

答案 1 :(得分:0)

这些功能并不相似。 super中的super.caseHandler()被硬编码到特定的父类。因此,这些default方法中的casesHandler不同,而且覆盖casesHandler并没有错。

为了达到这个目的,可能会有一些遵循某些惯例的抽象:

protected casesHandler(): boolean {
    switch (case) {
        case 0:
            break;
        default:
            return false;
    }

    return true;
}

protected casesWithDefaultHandler(): void
    const isCaseSolved = this.casesHandler();

    if (!isCaseSolved)
        super.caseHandler();
}

然后可以组成几个casesHandler函数。