🔎 Search Terms
finally, unreachable, condition, never
🕗 Version & Regression Information
- This builds fine in 3.2,
- produces a type error regarding the return type in 3.3 through 3.6,
- and starting 3.7, including the latest native preview, it produces the unreachable code error
⏯ Playground Link
https://www.typescriptlang.org/play/?noImplicitAny=false&ts=5.9.3#code/MYewdgzgLgBATgUwA4jlAXDAFAzBDMATwEoYBeAPhjAQDcE5zsFjMb7HKYBvAKBhhQAFnBAB3GAgDcvAL4zeoSLABmIEEzwRCYYNlYwACqIC2ASwgIAPGACuJgEYMqXPgKhxCPfgPgIotnBgMADMMgKyMMB4UMBCzKRuvogoaDjE4TCRKmZgeAA2+V5JAmYq2B62LN6+vkoQIPkIAHT5IADmWABEQghCXRk+ET6yclJAA
💻 Code
function report(e): never {
throw e;
};
const foo = async (): Promise<number> => {
try {
return 3;
} catch (e) {
report(e);
} finally {
if (true) {
console.log("heh");
}
}
};
🙁 Actual behavior
test.ts:11:5 - error TS7027: Unreachable code detected.
11 if (true) {
~~~~~~~~~~~
12 console.log("heh");
~~~~~~~~~~~~~~~~~~~~~~~~~
13 }
~~~~~
test.ts:12:7 - error TS7027: Unreachable code detected.
12 console.log("heh");
~~~~~~~~~~~~~~~~~~~
🙂 Expected behavior
Builds fine.
Additional information about the issue
This error vanishes if I do any of the following:
- Remove the explicit
never return type of reportError (although that resurfaces the return type error)
- Remove the call to
reportError entirely, or the whole catch block
- Remove the
if condition from the finally block, but leave in the console.log call
I found a similar issue #61259, but it does not include a catch block, which is integral to the issue here - although the issues might still be related. Similarly to that issue, the finally block also becomes reachable when adding another return to the catch block, but it is itself unreachable.
🔎 Search Terms
finally, unreachable, condition, never
🕗 Version & Regression Information
⏯ Playground Link
https://www.typescriptlang.org/play/?noImplicitAny=false&ts=5.9.3#code/MYewdgzgLgBATgUwA4jlAXDAFAzBDMATwEoYBeAPhjAQDcE5zsFjMb7HKYBvAKBhhQAFnBAB3GAgDcvAL4zeoSLABmIEEzwRCYYNlYwACqIC2ASwgIAPGACuJgEYMqXPgKhxCPfgPgIotnBgMADMMgKyMMB4UMBCzKRuvogoaDjE4TCRKmZgeAA2+V5JAmYq2B62LN6+vkoQIPkIAHT5IADmWABEQghCXRk+ET6yclJAA
💻 Code
🙁 Actual behavior
🙂 Expected behavior
Builds fine.
Additional information about the issue
This error vanishes if I do any of the following:
neverreturn type ofreportError(although that resurfaces the return type error)reportErrorentirely, or the wholecatchblockifcondition from thefinallyblock, but leave in theconsole.logcallI found a similar issue #61259, but it does not include a
catchblock, which is integral to the issue here - although the issues might still be related. Similarly to that issue, thefinallyblock also becomes reachable when adding anotherreturnto thecatchblock, but it is itself unreachable.