新闻详情

新闻详情

首页 / 资讯中心 / 详情

The Concise TypeScript Book 条件类型(Conditional Types)详解:用 extends 与三元表达式构建类型级逻辑

发布时间:2026/11/16 4:11:49来源:尧图网络
The Concise TypeScript Book 条件类型(Conditional Types)详解:用 extends 与三元表达式构建类型级逻辑
文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载本文基于开源书籍《The Concise TypeScript Book》第 40 章 Tipi condizionali条件类型 展开系统讲解 TypeScript 条件类型的定义语法、extends检查与三元分支的求值机制并结合本书后续章节覆盖可分配条件类型Distributive Conditional Types、infer类型推断以及内置预定义条件类型。读完本文你可以掌握如何用条件类型编写「类型取决于条件结果」的可复用类型工具并理解其在类型体操与工具类型设计中的典型应用。条件类型是什么条件类型Conditional Types是一种「根据条件动态决定最终类型」的类型构造方式待创建的类型由条件的求值结果决定。它由关键字extends与三元运算符组合而成在类型层面实现「如果……那么……否则……」的二选一分支。书中的原始示例见 conditional-types.md如下type IsArrayT T extends any[] ? true : false; const myArray [1, 2, 3]; const myNumber 42; type IsMyArrayAnArray IsArraytypeof myArray; // Type true type IsMyNumberAnArray IsArraytypeof myNumber; // Type false这个示例完整展示了条件类型的三个组成部分被检查的类型check typeT即类型参数传入的待判定类型约束检查extends 子句T extends any[]表示「T是否可赋值给任意数组类型」三元分支条件成立时取true否则取false。IsArraytypeof myArray的求值结果是字面量类型true而IsArraytypeof myNumber的求值结果是false。注意条件类型在编译期类型系统内求值与运行时的if语句无关——它操作的对象是类型本身因此常用于编写类型守卫工具、类型谓词式的判定逻辑。语义要点extends 是「可赋值性」检查T extends U ? A : B中extends的含义是「T是否可赋值于U」与继承语义的extends不同IsArraynumber[]中number[]可赋值给any[]结果为trueIsArraynumber中number不可赋值给any[]结果为false若把条件改为T extends number[] ? num : other则number[]命中num而string[]命中other可以据此写出更精细的类型级判定函数。可分配条件类型对联合类型逐成员分发本书第 41 章 Tipi condizionali distributivi可分配条件类型 进一步介绍了条件类型的一个关键特性当检查的类型参数是裸naked类型参数且传入值为联合类型时条件类型会对联合的每个成员分别求值再把结果合并为新的联合。这一特性在处理映射类型mapped types与高阶类型时尤其有用。书中原示例type NullableT T extends any ? T | null : never; type NumberOrBool number | boolean; type NullableNumberOrBool NullableNumberOrBool; // number | boolean | null拆解Nullablenumber | boolean的求值过程对number求值number extends any成立得到number | null对boolean求值boolean extends any成立得到boolean | null两次结果合并(number | null) | (boolean | null)化简后即为number | boolean | null。需要注意的分发前提是「裸类型参数」只有被检查的类型参数直接出现在extends左侧时才会触发分发若将其包裹例如T[] extends any[]中的T[]联合类型将作为整体参与判定不再逐成员分发。infer 关键字在条件类型中抽取子类型第 42 章 infer 关键字条件类型中的类型推断 说明了infer的用法在条件类型的extends子句内部声明一个待推断的类型变量当条件成立时TypeScript 会反向「提取」出匹配该模式的子类型。这让类型定义更灵活、更可复用。书中原示例type ElementTypeT T extends (infer U)[] ? U : never; type Numbers ElementTypenumber[]; // number type Strings ElementTypestring[]; // stringElementTypenumber[]的求值逻辑是number[]匹配(infer U)[]这一模式于是U被推断为number条件成立返回U即number。若传入的不是数组例如ElementTypenumber则落到never分支。infer还能匹配函数签名、元组等更复杂结构是手写ReturnType等工具类型的基础手段。预定义条件类型语言内置的常用转换第 43 章 Tipi Condizionali Predefiniti预定义条件类型 列出了 TypeScript 语言内置提供的一批工具类型它们针对给定类型的常见特征执行类型转换。书中列出的内置工具类型及其语义如下工具类型作用ExcludeUnionType, ExcludedType从联合类型中移除所有可赋值给ExcludedType的成员ExtractType, Union从联合类型中保留所有可赋值给Type的成员NonNullableType移除类型中的null与undefinedReturnTypeType提取函数类型Type的返回类型ParametersType提取函数类型Type的参数类型RequiredType将Type的所有属性变为必填PartialType将Type的所有属性变为可选ReadonlyType将Type的所有属性变为只读其中Exclude、Extract、NonNullable、ReturnType、Parameters本质上是基于条件类型及infer构建的而Partial、Required、Readonly在实现上属于映射类型mapped types书中将其一并归入「内置类型工具」的范畴讲解。了解这些内置类型等于掌握了一组「条件类型 映射类型」的组合范式自造同类工具类型时可直接参照其结构。小结与延伸阅读条件类型把「类型判定 类型转换」统一到一套T extends U ? A : B的语法中基础形态用extends与三元分支表达条件裸类型参数对联合类型自动分发实现逐成员转换infer让条件类型具备子类型抽取能力而Exclude、Extract、ReturnType等内置工具类型则是这些机制在生产级类型库中的标准体现。本书中与此主题直接相关的章节意大利语版第 40 章 条件类型第 41 章 可分配条件类型第 42 章 infer 关键字条件类型中的类型推断第 43 章 预定义条件类型第 40 章 英文原文以上示例均为纯类型级代码可直接复制到任意启用了strict模式的 TypeScript 项目中验证其求值结果。赞分享文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载相关推荐条件类型Conditional Types深度指南基于 The Concise TypeScript Book 的 extends 三元逻辑、infer 提取与内置工具类型全解析条件类型Conditional Types深度指南基于 The Concise TypeScript Book 的 extends 三元逻辑、infer文档教程The Concise TypeScript Book深入理解预定义条件类型Predefined Conditional TypesThe Concise TypeScript Book深入理解预定义条件类型Predefined Conditional Types 预定义条件类型Pr文档教程The Concise TypeScript Book预定义条件类型Predefined Conditional Types深入解析The Concise TypeScript Book预定义条件类型Predefined Conditional Types深入解析 TypeScript文档教程上一篇Open3D工业检测质量控制的3D方案终极指南下一篇Remotion Studio 可访问性审计解读WCAG 2.1 VPAT 报告与无障碍修复实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉