Skip to content

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

Closed

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:

Activity

  1. csr632 commented on Apr 15, 2020

    @csr632
    Author

    In ts3.8.3, both t2 and t3 are never. So this bug is introduced in 3.9.0.

  2. changed the title [-]Recursive type infer behaves differently when passing type literal and passing type alias[/-] [+][3.9.0 BUG] Recursive type infer behaves differently when passing type literal and passing type alias[/+] on Apr 15, 2020
  3. added
    BugA bug in TypeScript
    Fix AvailableA PR has been opened for this issue
    and removed
    Needs InvestigationThis issue needs a team member to investigate its status.
    on Apr 21, 2020
  4. locked as resolved and limited conversation to collaborators on Oct 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

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