实际使用 T extends U ? X : Y
编写实用的条件类型;学习联合类型上的分发,以及如何在需要时禁用分发。
实际使用 T extends U ? X : Y 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 3 节课。
简介
目标:使用条件类型在类型系统中表达逻辑,并理解它们何时会在联合类型上分发。
- 模式:
T extends U ? X : Y - 分发:针对联合类型的每个成员应用分支
基本模式
条件类型会根据 T 是否可赋值给 string 来选择分支。
type IsString<T> = T extends string ? true : false
type A = IsString<string>
// ^ true
type B = IsString<number>
// ^ false分发
使用裸 T 时,检查会针对联合类型的每个成员执行:string | number 会变为 string[] | number[]。
type ToArray<T> = T extends any ? T[] : never
type C = ToArray<string | number>
// distributes:
// C is string[] | number[]退出分发
将 T 包装在元组([T])中,即可阻止分发,并将联合类型作为整体处理。
type ToArrayNoDist<T> = [T] extends [any] ? T[] : never
type D = ToArrayNoDist<string | number>
// no distribution:
// D is (string | number)[]实际应用工具
该模式的示例:对于数组,ElementType 使用 infer 提取元素类型;否则,它会保持原类型不变。
type NonEmptyArray<T> = T[] extends [] ? never : T[]
// Usually better:
// type ElementType<T> = T extends ReadonlyArray<infer U> ? U : T
type E1 = ElementType<string[]>
// ^ string
type E2 = ElementType<readonly number[]>
// ^ number
type E3 = ElementType<string>
// ^ string提示
提示:保持条件简单;注意部署情况;复用辅助类型;为复杂组合添加测试文件。
// Tips
// - Keep conditions simple; deep nesting harms readability
// - Document distribution behavior for teammates
// - Prefer helper aliases (ElementType, Awaited) for reuse
// - Watch for De Morgan like logic when composing unions分发检查
快速检查:条件类型何时会进行分发?
回顾
回顾:条件类型可以在类型中表达逻辑。分发会针对联合类型的每个成员应用;使用元组包装可以退出分发。
常见问题解答
「实际使用 T extends U ? X : Y」课时是免费的吗?
是的 — 「实际使用 T extends U ? X : Y」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 3 节课。
「实际使用 T extends U ? X : Y」这节课中我会学到什么?
编写实用的条件类型;学习联合类型上的分发,以及如何在需要时禁用分发。 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 TypeScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。
「实际使用 T extends U ? X : Y」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 TypeScript Academy 课中编写并运行代码吗?
能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 实际使用 T extends U ? X : Y
- 使用 infer 构建类似 ReturnType 的工具类型
- 内置工具类型:ReturnType、Parameters、InstanceType 等