Skip to content

Unexpected distributive behaviour on type alias #62761

@realainov

Description

@realainov

🔎 Search Terms

distributive conditional types, naked type parameter, type alias, unions

🕗 Version & Regression Information

  • This changed between versions 3.8.3 and 3.9.7.
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about distributive conditional types, naked type parameter, type alias, unions.

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.9.3#code/C4TwDgpgBAaghgGwK7QLxQIxQD5QEwBQBokUAKhALZhToDa8yEAulBAB7AQB2AJgM5Q6AS24AzCACdYzAlCgB+WG048BUJNwDW3APYB3bnPmKhMADSxEKWSagAuKNwgA3KccfO3koiWgAlCH4kBGBacioaAHoolUgAYzC6DEssXDxWXDo8VJx8WxMYgD0FIA

💻 Code

type Value = 1 | 2

type Result = [Value] extends [infer V]
  ? V extends unknown
    ? [V, Value]
    : never
  : never

🙁 Actual behavior

[1, 1] | [2, 2]

🙂 Expected behavior

[1, 1 | 2] | [2, 1 | 2]

Additional information about the issue

It shouldn't work the way it does now, for several reasons:

  1. Value is not naked type parameter.
  2. Using brackets, distributive behaviour must be disabled.

Metadata

Metadata

Assignees

Labels

Needs InvestigationThis issue needs a team member to investigate its status.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions