根据 ESLint 的 Switch 语句默认 return "Unreachable"

Switch Statement default return "Unreachable" according to ESLint

我有一个函数可以根据内容创建者提供的 url 和用户设备的 userAgent 来确定按钮(锚标记)的 url。

在这个函数中,我有两个 switch 语句。我首先查看内容创建者选择用于按钮的 link 类型(网络 url 或 App Store link)

如果内容创建者指定 App Store link,他们还会为多个平台提供一系列 url。他们不一定为每个平台都提供 link,因此我们可以回退到网络 url,这也由创建者设置,或由后端提供(第一个 url 基本都能找到)

我有一个问题,内部 switch 语句中的 default 子句被 ESLint 标记为 Unreachable code

ESLint错了吗?或者有什么我可以做得更好的吗?

function getButtonLink() {
    switch(this.props.linkType) {
        case 0: {  // appStore link, get the best-fit appstore link for device
            switch(this.detectUserAgent()) {
                case 1: {
                    return this.setButtonUrlProp('windows');
                }
                case 2: {
                    return this.setButtonUrlProp('android'); 
                }
                case 3: {
                    return this.setButtonUrlProp('ios');
                }
                case 4: {
                    return this.setButtonUrlProp('amazon'); 
                }
                default: {
                    return this.setButtonUrlProp('web');
                }
            }
        }
        case 1:   // web link
        default: {
            return this.props.button.urls.web;
        }
    }
}

ESLint 没有向我显示此警告。确保错误不是由其他原因引起的,例如 detectUserAgent() 从不返回不是 1、2、3 或 4 的值?

无论如何,我都会重构代码,以便外部条件使用其他内容,例如 if - else,因为嵌套的 switch 语句一目了然会更难阅读。

怎么样:

    function getButtonLink() {
        switch(this.props.linkType) {
            case 0: // appStore link, get the best-fit appstore link for device
                var agents = ["web", "windows", "android", "ios", "amazon"];
                return this.setButtonUrlProp(
                    agents[this.detectUserAgent()] || agents[0]
                );
            }
            case 1: // web link
            default: {
                return this.props.button.urls.web;
            }
        }
    }