Skip to content

[3.9.0 BUG] Recursive type infer behaves differently when passing type literal and passing type alias #37982

Closed
@csr632

Description

@csr632

TypeScript Version: 3.9.0-beta

Search Terms: recursive type infer

Code

interface Box<T> {
  __: T
}

type Recursive<T> =
  | T
  | Box<Recursive<T>>

type InferRecursive<T> = T extends Recursive<infer R> ? R : "never!"

// the type we are testing with
type t1 = Box<string | Box<number | boolean>>

type t2 = InferRecursive<t1>
type t3 = InferRecursive<Box<string | Box<number | boolean>>> // write t1 explicitly

// Why is t2 and t3 different??
// They have same input type!

Expected behavior: t2 and t3 should be the same: string | number | boolean

Actual behavior: t2 is never. t3 is the expected string | number | boolean

Playground Link: https://www.typescriptlang.org/v2/en/play?ts=3.9.0-beta#code/JYOwLgpgTgZghgYwgAgEIHsAeAeAKgPmQG8AoZZAfQoC5lcSBfEksATwAcUAlCBAVygBnYADcIeQgF4yyAD50Z8jDh78ho8QXzM2nZAEkQMaKoHCxE5JLrIImSCAAmg5KfUXQxqK8IB+V8i0AEQgEGJQAIRBzAD0MchgABYouigA7ihwUCkQgmCgAObIacBJLBwpAIxWaFjYeVCFcrU4IHwAtgBG0M2d6OgANhBwIPja5XpgAEw1hl5u5uJgldqpCQDMs0YmvGYa2Mr1YI0gRUp1bV098n2Dw6NjyHHFjZAJ1XbsA8AIpQOssXiAHVEqxkMAXNNkCNHBtkI5gDAvBBwL5fCRnrhkmDEnAxMhBHB2ihQOw+GAEhUIiQgA

Related Issues:

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issueRescheduledThis issue was previously scheduled to an earlier milestone

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions