Closed Jack-Works closed 1 week ago
This error is intentional; a function without a return may not always be void
.
declare function fail(): never;
export function f() {
fail();
}
export const g = () => {
fail();
}
Is:
export declare function f(): void;
export declare const g: () => never;
This can't be determined without type analysis, so is disallowed under isolatedDeclarations
.
Correct error for function expressions, but not function declarations - declarations won't infer never
: void
(and how often do people define a noop function?).hmm, I didn't think of never
, so the function expression part is wrong. But I find it annoying to write : void
for obviously clear function declarations.
Discussed and we don't want to make it untenable to, in the future, change the rules around function declaration return type inference. For example, it's maybe preferable that
function dofail() {
Debug.fail("oops");
}
have an inferred return type of never
(as it would if written as a function expression) rather than void
.
🔎 Search Terms
isolatedDeclaration
🕗 Version & Regression Information
5.5.0
⏯ Playground Link
https://www.typescriptlang.org/play/?isolatedDeclarations=true&ts=5.5.0-dev.20240426#code/KYDwDg9gTgLgBAMwK4DsDGMCWEWIBQCUcA3gL5A
💻 Code
🙁 Actual behavior
Function must have an explicit return type annotation with --isolatedDeclarations. (9007)
🙂 Expected behavior
No error
Additional information about the issue
Functions with no return statements can be easily inferred as type
void
, so there is no need to give this warning.