Skip to content

isolatedDeclarations should not have warning for functions that have no return statementsΒ #58330

Closed

Description

πŸ”Ž 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

export function f() {}

πŸ™ 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.

Activity

  1. jakebailey commented on Apr 26, 2024

    @jakebailey
    Member

    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.

    Playground Link

  2. RyanCavanaugh commented on Apr 26, 2024

    @RyanCavanaugh
    Member

    Correct error for function expressions, but not function declarations - declarations won't infer never

  3. jakebailey commented on Apr 26, 2024

    @jakebailey
    Member

    #58331 is indiscriminate in what it affects; if we want to allow this for function declarations only, that may be possible, but it sure seems like an extra inconsistency just to avoid writing : void (and how often do people define a noop function?).

  4. Jack-Works commented on Apr 26, 2024

    @Jack-Works
    ContributorAuthor

    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.

  5. added
    SuggestionAn idea for TypeScript
    DeclinedThe issue was declined as something which matches the TypeScript vision
    and removed on May 2, 2024
  6. RyanCavanaugh commented on May 3, 2024

    @RyanCavanaugh
    Member

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    DeclinedThe issue was declined as something which matches the TypeScript visionSuggestionAn idea for TypeScript

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions