Microsoft/TypeScript
在 GitHub 查看Exhaustive switch case with returns can mark a finally block as unreachable
Open
#61,259 创建于 2025年2月24日
BugDomain: check: Control FlowHelp Wanted
仓库指标
- Star
- (48,455 star)
- PR 合并指标
- (平均合并 6天 17小时) (30 天内合并 9 个 PR)
描述
🔎 Search Terms
finally switch exhaustive unreachable
🕗 Version & Regression Information
This is the behavior in every version I tried ( doesn't typecheck pre 3.7 ), and I reviewed the FAQ for entries about unreachable code
⏯ Playground Link
💻 Code
const c = (v: 1 | 2) => {
try {
switch (v) {
case 1: return v
case 2: return v
}
} finally {
if (true) {
console.log('exit')
}
}
}
🙁 Actual behavior
The contents of the finally blocked are marked as unreachable
🙂 Expected behavior
That they are reachable
Additional information about the issue
While the example seems to include some confusing additions the replication apparently requires:
- The cases to be exhaustive
- No default case
- For the switch expression be typed as a literal union of some form
- An
ifstatement to be in thefinallyblock
I assume this is a chaotic mix of unreachable patterns upsetting flow analysis. I've also noticed that it you add an unreachable return statement after the switch then the contents of finally become reachable.