在Typescript中使用If-instanceof-statement是否不好?

时间:2018-07-26 13:34:29

标签: javascript typescript if-statement instanceof

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

上面的代码片段反映了执行不同功能的不同类型的动作。我使用if和else条件检查动作。

我觉得这不是一个好的解决方案,因为将来我可能会采取更多行动,并且if-else-ladder会不断增长,并且当发生更改时我需要再次更新代码。

有什么想法可以改善这种特定情况吗?

2 个答案:

答案 0 :(得分:2)

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

每个类型实例selection()Action1内都有一个名为Action2的方法,并使用该方法定义要构建的主体/所需功能。只需调用selection()方法来避免情况。因此,根据类型的实例,它将调用相应类型的正确selection()方法

答案 1 :(得分:1)

在TypeScript中使用if / else并不是天生的错误。

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

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

...或

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

...或类似内容(或者,当然,直接使用actionEvent.execute()代替selectAction)。

这是基本的多态性,具有不同的对象符合相同的接口,并且在调用时(可能)执行不同的操作。