根据 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;
}
}
}
我有一个函数可以根据内容创建者提供的 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;
}
}
}