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:
TypeScript Version: 3.9.0-beta
Search Terms: recursive type infer
Code
Expected behavior: t2 and t3 should be the same:
string | number | booleanActual behavior: t2 is never. t3 is the expected
string | number | booleanPlayground Link: https://www.typescriptlang.org/v2/en/play?ts=3.9.0-beta#code/JYOwLgpgTgZghgYwgAgEIHsAeAeAKgPmQG8AoZZAfQoC5lcSBfEksATwAcUAlCBAVygBnYADcIeQgF4yyAD50Z8jDh78ho8QXzM2nZAEkQMaKoHCxE5JLrIImSCAAmg5KfUXQxqK8IB+V8i0AEQgEGJQAIRBzAD0MchgABYouigA7ihwUCkQgmCgAObIacBJLBwpAIxWaFjYeVCFcrU4IHwAtgBG0M2d6OgANhBwIPja5XpgAEw1hl5u5uJgldqpCQDMs0YmvGYa2Mr1YI0gRUp1bV098n2Dw6NjyHHFjZAJ1XbsA8AIpQOssXiAHVEqxkMAXNNkCNHBtkI5gDAvBBwL5fCRnrhkmDEnAxMhBHB2ihQOw+GAEhUIiQgA
Related Issues: