Skip to content

tagged/named rest parameter participating in circular reference causes error #63584

Description

@dragoncoder047

🔎 Search Terms

named tuple element rest recursive circularly references union unions

🕗 Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about everything and didn't find anything relevant

⏯ Playground Link

https://www.typescriptlang.org/play/?esModuleInterop=false&target=99&jsx=0&noFallthroughCasesInSwitch=false&ts=6.0.0-dev.20260416&noUnusedLocals=true&noUnusedParameters=true&noUncheckedIndexedAccess=true#code/KYDwDg9gTgLgBDAnmYcDiEIBMAiEDGActqgLwBQcVcAPnAM4xQCWAdgOaXV0DaARMz4AaOADpxGbHiIkeAXTlcqvPgBtBItllAAuOKwCuAWwBGwKCPGjJuAsW3y5AbnLlQkWAmSoAQgENbGW0ARjgKaloGJjZOCJUNMXEYP3Z2YCw9f0D7YGDHcgB6AoiSiIA9CsqKpUj+dWE4LV19YzMLRNEs6Ry8hRc3cGh4JBQ4LrsSACYwmrpGFg5ZuH4Eq3Gg4En8uOW1BKaQPUNTc0sklLSMsYDuqccXItKn5+eqqvIgA

💻 Code

export type GoodDocNode =
    | string
    | ["i", ...GoodDocNode[]]
    | ["li", index: number, ...GoodDocNode[]];

export type BadDocNode1 =
    | string
    | ["i", ...tagged: BadDocNode1[]]
//             ^^^^^^^^
    | ["li", index: number, ...BadDocNode1[]];

export type BadDocNode2 =
    | string
    | ["i", ...BadDocNode2[]]
    | ["li", index: number, ...tagged: BadDocNode2[]];
//                             ^^^^^^^^

🙁 Actual behavior

Error:

Type alias 'BadDocNode1' circularly references itself.
Type alias 'BadDocNode2' circularly references itself.

🙂 Expected behavior

No errors, because the only differences between the two is the name on the rest parameter in the tuple, nothing structurally is different.

Additional information about the issue

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptDomain: check: Type Circularitystackoverflows caused by circularities, or unexpected errors where no circularity appears to exist

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions