Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
csr632 opened this issue Apr 15, 2020 · 2 comments · Fixed by #38011
Assignees
Labels
Bug A bug in TypeScript Fix Available A PR has been opened for this issue Rescheduled This issue was previously scheduled to an earlier milestone

Comments

@csr632
Copy link

csr632 commented Apr 15, 2020

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:

@csr632
Copy link
Author

csr632 commented Apr 15, 2020

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

@csr632 csr632 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 Apr 15, 2020
@RyanCavanaugh RyanCavanaugh added the Needs Investigation This issue needs a team member to investigate its status. label Apr 15, 2020
@RyanCavanaugh RyanCavanaugh added this to the TypeScript 3.9.1 milestone Apr 15, 2020
@weswigham weswigham added Bug A bug in TypeScript Fix Available A PR has been opened for this issue and removed Needs Investigation This issue needs a team member to investigate its status. labels Apr 21, 2020
@RyanCavanaugh RyanCavanaugh added the Rescheduled This issue was previously scheduled to an earlier milestone label May 20, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug A bug in TypeScript Fix Available A PR has been opened for this issue Rescheduled This issue was previously scheduled to an earlier milestone
Projects
None yet
3 participants