Conditional Types: T extends U ? X : Y
Write type-level if statements with conditional types.
Conditional Types: T extends U ? X : Y is a free TypeScript Academy lesson on CoddyKit — lesson 3 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the TypeScript Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
Welcome
Basic Syntax
type IsString<T> = T extends string ? true : false;
type A = IsString<string>; // true
type B = IsString<number>; // falseNonNullable Built-In
type NonNullable<T> = T extends null | undefined ? never : T;
type C = NonNullable<string | null>; // stringConditional with Generics
type Flatten<T> = T extends Array<infer I> ? I : T;
type Str = Flatten<string[]>; // string
type Num = Flatten<number>; // numberNested Conditionals
type TypeName<T> =
T extends string ? 'string' :
T extends number ? 'number' :
T extends boolean ? 'boolean' :
'object';Distribution Over Unions
type ToArray<T> = T extends any ? T[] : never;
type R = ToArray<string | number>; // string[] | number[]Preventing Distribution
type NoDistribute<T> = [T] extends [any] ? T[] : never;
type R2 = NoDistribute<string | number>; // (string | number)[]Using never to Filter
type OnlyStrings<T> = T extends string ? T : never;
type S = OnlyStrings<'a' | 'b' | 1 | 2>; // 'a' | 'b'Conditional Types in Mapped Types
type NullableValues<T> = { [K in keyof T]: T[K] extends string ? null : T[K] };Inferring from Function Parameters
type FirstParam<T> = T extends (first: infer P, ...rest: any[]) => any ? P : never;
type FP = FirstParam<(a: string, b: number) => void>; // stringBuilt-In Conditional Utilities
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;Quick Check
Recap
Frequently asked questions
Is the “Conditional Types: T extends U ? X : Y” lesson free?
Yes — the full text of “Conditional Types: T extends U ? X : Y” is free to read here on the web, and the TypeScript Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the TypeScript Academy course, upgrade to CoddyKit PRO.
What will I learn in “Conditional Types: T extends U ? X : Y”?
Write type-level if statements with conditional types. You practise TypeScript Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start TypeScript Academy?
No prior experience is required. TypeScript Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 3 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Conditional Types: T extends U ? X : Y” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this TypeScript Academy lesson?
Yes. Every TypeScript Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- keyof and Indexed Access Types
- Generic Constraints: Narrowing Type Parameters
- Conditional Types: T extends U ? X : Y
- Distributive Conditional Types