0Pricing
TypeScript Academy · 课时

实际使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 实际使用 T extends U ? X : Y
  2. 使用 infer 构建类似 ReturnType 的工具类型
  3. 内置工具类型:ReturnType、Parameters、InstanceType 等
← 返回 TypeScript Academy