Skip to content

Regression: bug in emitted declarations involving branded types since 5.1 #54655

Description

Bug Report

Code that used to compile fine in 5.0.0 now produces invalid declarations with type names suffixed in _1 which are not defined (see code below).

🔎 Search Terms

Branded type, suffix, emit

🕗 Version & Regression Information

  • This changed between versions 5.0.0 and 5.1.3

⏯ Playground Link

Playground link with relevant code

💻 Code

// A simple branded type definitionexporttypeBrand<Base,Branding,ReservedNameextendsstring="__type__">=Base&{[KinReservedName]: Branding}&{__witness__: Base};// Defining a branded typeexporttypeBoundedInteger<LowerBoundextendsnumber,UpperBoundextendsnumber>=Brand<number,"BoundedInteger">;// Using in in a functionexportconsttoBoundedInteger=<LowerBoundextendsnumber,UpperBoundextendsnumber>(bounds: {lowerBound: LowerBound;upperBound: UpperBound;})=>(n: number): BoundedInteger<LowerBound,UpperBound>=>// Implementation doesn't matter here({}asany)

🙁 Actual behavior

// v5.1.3// in D.TSexporttypeBrand<Base,Branding,ReservedNameextendsstring="__type__">=Base&{[KinReservedName]: Branding;}&{__witness__: Base;};exporttypeBoundedInteger<LowerBoundextendsnumber,UpperBoundextendsnumber>=Brand<number,"BoundedInteger">;exportdeclareconsttoBoundedInteger: <LowerBoundextendsnumber,UpperBoundextendsnumber>(bounds: {lowerBound: LowerBound;upperBound: UpperBound;// ❌ Cannot find name 'LowerBound_1'. Did you mean 'LowerBound'?})=>(n: number)=>BoundedInteger<LowerBound_1,UpperBound_1>;// 👆 This line

🙂 Expected behavior

// v5.0.4// in D.TSexporttypeBrand<Base,Branding,ReservedNameextendsstring="__type__">=Base&{[KinReservedName]: Branding;}&{__witness__: Base;};exporttypeBoundedInteger<LowerBoundextendsnumber,UpperBoundextendsnumber>=Brand<number,"BoundedInteger">;exportdeclareconsttoBoundedInteger: <LowerBoundextendsnumber,UpperBoundextendsnumber>(bounds: {lowerBound: LowerBound;upperBound: UpperBound;})=>(n: number)=>BoundedInteger<LowerBound,UpperBound>;// 👆 This line

Metadata

Metadata

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions