Skip to content

Recursive type alias in union type breaks in 3.8.3 #37344

Closed
@stefanvonderkrone

Description

@stefanvonderkrone

TypeScript Version: 3.8.3

Search Terms: recursive, recursion

Code

type Action<T, P> = P extends void ? { type : T } : { type: T, payload: P }

enum ActionType {
    Foo,
    Bar,
    Baz,
    Batch
}

type ReducerAction =
  | Action<ActionType.Bar, number>
  | Action<ActionType.Baz, boolean>
  | Action<ActionType.Foo, string>
  | Action<ActionType.Batch, ReducerAction[]>

Expected behavior: compiler does not complain recursive type alias, works fine in 3.7.5

Actual behavior: compiler complains recursive type alias, breaks in 3.8.3
Type arguments for 'Array' circularly reference themselves.

Playground Link:
http://www.typescriptlang.org/play/index.html#code/C4TwDgpgBAggxsAlgewHYB4AqAaKAFAPigF58oIAPYCVAEwGcoA3ZRWqAfigG8pRIoALiiYoAXyE8+4CMJxQwAQxAAbZItrC84gFA6aAVwC2sBClSYZPHVFtQAYsmTYbdgEKKATi7tQPALx93RWA4AAsdMT1+aAAlCFoDOAhPeCQ0ElcAH1N0jDTzS0gAOg9vKFRjACMUgmzc83QCtCKIUsVAqCqnFQhFVDrbHOb8sxaZYsdnKHpgT0RUAHNBqGGx0bzW9tCw3HjE5NT1gG0AXTqgA

Related Issues:
I'm not sure, if this might be related to #35017.

Metadata

Metadata

Assignees

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