All quizzesHard
Conditional Types & Infer
Preview — 3 of 10 questions
What is the exact result?
javascript
type ToArray<T> = T extends any ? T[] : never;
type A = ToArray<string>;
type B = ToArray<string | number>;
type C = ToArray<never>;AA = string[], B = string[] | number[], C = never
BA = string[], B = (string | number)[], C = never
CA = string[], B = string[] | number[], C = never[]
DAll three are never
What does this compute?
javascript
type Flatten<T> =
T extends Array<infer U>
? Flatten<U>
: T extends Promise<infer V>
? Flatten<V>
: T;
type A = Flatten<number[][][]>;
type B = Flatten<Promise<Promise<string>>>;
type C = Flatten<Promise<number[]>>;AA = number[], B = Promise<string>, C = number[]
BA = number, B = string, C = number[]
CA = number, B = string, C = number
DAll three are never
What does infer produce here?
javascript
type FirstAndLast<T extends readonly any[]> =
T extends readonly [infer First, ...any[], infer Last]
? [First, Last]
: T extends readonly [infer Only]
? [Only, Only]
: never;
type A = FirstAndLast<[1, 2, 3, 4, 5]>;
type B = FirstAndLast<['hello']>;
type C = FirstAndLast<[]>;AA = [1, 5], B = ['hello', 'hello'], C = never
BA = [1, 2, 3, 4, 5], B = ['hello'], C = []
CA = [1, 5], B = never, C = never
DA = never, B = never, C = never
Sign up free to play
Answer all 10 questions (7 more), see explanations for every answer, and track your score.