Skip to content

Incorrect type declarations for a constant inside a namespace merged with an enumΒ #61944

Open
@qzix

Description

@qzix

πŸ”Ž Search Terms

"enum", "namespace", "declaration", "d.ts", "const"

πŸ•— Version & Regression Information

  • This changed between versions 3.1.0-dev.20180906 and 3.1.0-dev.20180907

⏯ Playground Link

https://www.typescriptlang.org/play/?#code/KYOwrgtgBAYg9nKBvAUFdUBGBDATigXxRGwmAGcAHbAY2FgWTQ2AA9K5cAXKGuEcjxwAvKAF4GcAHQ5cAbkIogA

πŸ’» Code

enum Foo {
    bar
}
namespace Foo {
    export const baz = Foo.bar;
}

πŸ™ Actual behavior

Typescript generates invalid d.ts for the enum value assigned to the constant (in all versions starting 3.1.0-dev.20180907)

declare enum Foo {
    bar = 0
}
declare namespace Foo {
    const baz = bar; // <-- unknown `bar` identifier, `baz` type is `any`
}

In versions before 3.1.0-dev.20180906 the constant is declared as const baz: Foo;

πŸ™‚ Expected behavior

Typescript generates a valid declaration of the constant

declare enum Foo {
    bar = 0
}
declare namespace Foo {
    const baz = Foo.bar;
}

or

declare enum Foo {
    bar = 0
}
declare namespace Foo {
    const baz: Foo;
}

Additional information about the issue

No response

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issueHelp WantedYou can do this

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions