在 Typescript 中使用 If-instanceof-statements 不好吗?

Is it bad to have If-instanceof-statements in Typescript?

   selectAction: (actionEvent) => {
        if (actionEvent instanceof Action1) { 
            // action1 body implementation
        } else if (actionEvent instanceof Action2) {
            // action2 body implementation
        } 
    }

上面的代码片段反映了不同类型的动作functionalities.I使用了if和else条件来检查动作。

我觉得这不是一个好的解决方案,因为我以后可能会有更多的操作,而且我的 if-else-ladder 会不断增长,当有变化时我需要再次更新我的代码。

有什么改进这个特定场景的想法吗?

在 TypeScript 中使用 if/else 本质上没有错。

但是,当您使用 instanceof 时,很可能您有更好的选择。在这种情况下,几乎可以肯定,动作本身应该对它们所做的事情负责:

selectAction: (actionEvent) => {
    actionEvent.execute();
}

...或

selectAction: (actionEvent) => {
    const action = /*...derive action from actionEvent...*/;
    action.execute();
}

...或类似的(或者当然,直接使用 actionEvent.execute() 而不是 selectAction)。

这是基本的多态性,不同的对象符合相同的接口,并且在被调用时(可能)做不同的事情。

使用鸭子输入 的方法来避免有条件的情况。 Source

在每个类型实例 Action1Action2 中有一个名为 selection() 的方法,并使用它来定义要构建的 body/desired 功能。并简单地调用 selection() 方法避免条件。所以基于类型的实例它会调用对应类型

的正确selection()方法