重构switch语句打字稿

时间:2019-01-07 18:37:31

标签: typescript design-patterns

有没有更好的方法在Typescript中编写switch语句?我在组件中有以下代码:

switch (actionType) {
    case Type.Cancel {
        this.cancel();
        break;
    }
    case Type.Discard {
        this.discard();
        break;
    }
    case Type.Delete {
        this.delete();
        break;
    }
}

我一直在阅读有关策略和/或工厂模式的信息,但这将意味着为每种情况创建不同的类。就我而言,我不确定这是否是最好的方法,但是非常欢迎您提供有关此主题的任何建议。

1 个答案:

答案 0 :(得分:0)

一个不错的中间立场是从Type到函数的映射:

class Test {
  private map = new Map<Type, () => void>([
    [Type.Cancel, () => this.cancel()],
    [Type.Discard, () => this.discard()],
    [Type.Delete, () => this.delete()]
  ]);

  yourMethod(actionType: Type) {
    if (this.map.has(actionType)) {
      this.map.get(actionType)();
    }
  }
}

如果方法已经绑定(使用箭头功能,bind等),则可以简化如下操作:

  private map = new Map<Type, () => void>([
    [Type.Cancel, this.cancel],
    [Type.Discard, this.discard],
    [Type.Delete, this.delete]
  ]);