Created
October 15, 2020 23:14
-
-
Save keigoi/067334ceb02e17d5eef1d0b077691b17 to your computer and use it in GitHub Desktop.
TypeScript strange behaviour in nested conditional types
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type GetFoo<T> = [T] extends [{foo:infer R}] ? R : never; | |
type Foo = GetFoo<{foo:"A"}> // "A" | |
type GetFoo0<T> = [T] extends [{foo:string}] ? [T] extends [{foo:infer R}] ? R : never : never; | |
type Bogus = GetFoo0<{foo:"A"}> // unknown ??? | |
// to remedy this, use indexed type T["foo"] | |
type GetFoo1<T> = [T] extends [{foo:string}] ? [T["foo"]] extends [infer R] ? R : never : never; | |
type Foo1 = GetFoo1<{foo:"A"}> // "A" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment