Skip to content

Ambiguous scoping of if statement bodyΒ #60175

Closed
@acutmore

Description

@acutmore

πŸ”Ž Search Terms

type, scoping, ifStatement

πŸ•— Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about type scoping

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.6.2#code/GYVwdgxgLglg9mABMAjACgJSIN4ChEGIzCJpQBOIAphvoYVAJ4AOViAzogLwcUxgBzANx16iCAnZwANlQB00uALQAiFYgCGndhhH1cAX1y5QkWAmQAmTDlFESZSjVtj6TVh269y-YXaP0EmBSsgpKqupaHLqGuEA

πŸ’» Code

function f1() {
    if (true)
       type s = string;
       console.log("" as s);
}

function f2() {
    if (true) {
         type s = string;
    }
    console.log("" as s);
}

πŸ™ Actual behavior

From type-system perspective in the first if it appear that the console.log is part of the body of the if because the type is in scope. However the JS emit is:

function f1() {
    if (true)
        ;
    console.log("");
}

So the console.log is not part of the if body.

πŸ™‚ Expected behavior

function f1() {
    if (true)
       type s = string;
       // @ts-expect-error : "cannot find name 's'"
       console.log("" as s);
}

Also happy for this to be a parse error. An if statement with only a type declaration as a body hopefully has no use cases.

Additional information about the issue

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptHelp WantedYou can do this

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions