Skip to content

Instantly share code, notes, and snippets.

@keigoi
Created October 15, 2020 23:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save keigoi/067334ceb02e17d5eef1d0b077691b17 to your computer and use it in GitHub Desktop.
Save keigoi/067334ceb02e17d5eef1d0b077691b17 to your computer and use it in GitHub Desktop.
TypeScript strange behaviour in nested conditional types
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