文档教程【免费下载链接】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》系列的第 17 讲围绕仓库 literal-types.md韩文版见 ko-kr/book/literal-types.md展开。字面量类型是 TypeScript 类型系统的地基之一它把值本身变成类型让编译器能以单个精确值而非宽泛的string/number/boolean参与类型检查。读完本文你将掌握字符串/数字/布尔字面量类型的定义方式、它与const/let推断规则的关系、如何借助联合类型与类型别名组合出业务枚举以及如何在类型守卫narrowing与模板字面量类型中发挥它的实战威力。一、什么是字面量类型字面量类型Literal Type是集合类型内部只包含单个元素的集合它定义一个非常精确的值该值必须是某个 JavaScript 原始值。TypeScript 中的字面量类型有三种数字字面量、字符串字面量和布尔字面量。const a a; // 字符串字面量类型String literal type const b 1; // 数字字面量类型Numeric literal type const c true; // 布尔字面量类型Boolean literal type其核心特征在于字面量类型的可接受值只有一个。a这个字面量类型只接受字符串a不接受b1只接受数字1不接受2true只接受true不接受false。这一点与普通的宽泛类型string、number、boolean形成鲜明对比——宽泛类型接受该大类下的任意值。从本仓库的 built-in-type-primitives.md 可以看到TypeScript 的内置类型原语中string表示文本数据、number表示整数与浮点数、boolean表示逻辑值。字面量类型正是这些原语类型在值域上的精确收缩。二、三种字面量类型详解2.1 字符串字面量类型String Literal Type字符串字面量类型把某一个具体字符串当作类型使用最常见的场景是与联合类型组合type O a | b | c;在上面的例子中O只由指定的三个值构成任何其他字符串都不是合法的Olet v1: O a; // ✅ 合法 let v2: O b; // ✅ 合法 let v3: O d; // ❌ 报错类型 d 不能赋值给类型 O字符串字面量通常用于表达有限的状态集例如 HTTP 方法、页面路由名、事件类型等是构建受控枚举的重要手段。2.2 数字字面量类型Numeric Literal Type数字字面量类型把某一个具体数字当作类型使用。参考仓库 primitive-types.md 的说明number类型以 64 位浮点表示可表达整数与小数还支持十六进制0x、二进制0b、八进制0o字面量。这些写法同样可以出现在字面量类型的位置type SmallNumber 1 | 2 | 3; type Port 80 | 443 | 8080; const p: Port 443; // ✅ 合法 const bad: Port 3306; // ❌ 报错数字字面量类型非常适合表达端口号、错误码、常量枚举值等有限数值集合。2.3 布尔字面量类型Boolean Literal Type布尔字面量类型只有两个可能值true与false。它通常与联合类型配合用于表达二选一的状态type Enabled true | false; // 等价于 boolean但显式表达了意图 type Flag true | disabled; // 混合联合也完全合法需要说明的是单独的type B true | false在类型语义上等价于boolean但布尔字面量真正的价值在于与区分联合discriminated union结合充当可判别字段discriminant这一点在仓库的 discriminated-unions.md 章节有专门讲解。三、字面量类型与const/let的推断规则理解字面量类型绕不开 TypeScript 的字面量推断Literal Inference机制。仓库中的 literal-inference.md 专门讲解了这一点const x x; // 类型为字面量类型 x因为该值此后无法改变 let y y; // 类型为 string因为该值此后可以被修改用const声明时变量的值不可变TypeScript 会保守地将类型推断为最精确的字面量类型x用let声明时变量可被重新赋值TypeScript 会将其**拓宽widen**为宽泛类型string。同样的规则也适用于对象属性。下面的例子中o.x被推断为string而不是字面量a因为 TypeScript 认为对象属性之后随时可能被修改type X a | b; let o { x: a, // 这里被拓宽为 string }; const fn (x: X) ${x}-foo; console.log(fn(o.x)); // 报错类型 string 不能赋值给类型 X由于X是更窄narrower的类型而o.x被推断为更宽wider的string调用fn时会抛出编译错误。这一点与仓库 type-from-value.md 中从值推断类型的说明一致const推断为字面量、let拓宽为宽泛类型。解决方案一使用as const断言让属性保持字面量类型let o { x: a as const, // 现在 o.x 的类型是 a };解决方案二直接将属性断言为联合类型Xlet o { x: a as X, // 现在 o.x 的类型是 a | b };两种写法都能让fn(o.x)通过类型检查。区别在于as const给出的是最窄的a而as X给出的是联合a | b后者允许之后给o.x赋其他合法值。实际项目中若属性值只读、永不变化优先使用as const。四、联合类型与类型别名字面量类型的主战场字符串、数字、布尔字面量类型通常不会单独存在而是与联合类型Union Type、**类型守卫type guard和类型别名type alias**配合使用。仓库 union-type.md 对联合类型给出了定义联合类型表示一个值可以是若干类型之一用|符号连接let x: string | number; x hello; // ✅ 合法 x 123; // ✅ 合法当联合类型的成员是字面量时就构成字面量联合类型这是 TypeScript 中模拟枚举的最常用手法// 字符串字面量联合表达一组固定字符串 type Direction north | south | east | west; type HttpMethod GET | POST | PUT | DELETE | PATCH; type Status active | inactive; // 数字字面量联合表达一组固定数值 type DiceRoll 1 | 2 | 3 | 4 | 5 | 6; // 混合联合不同类型的字面量也可以共存 type Mixed a | 1 | true;通过type关键字给联合类型起别名后如开篇的type O a | b | c可以避免在多处重复书写一长串字面量并在编译期获得强校验任何不属于集合的字符串都会在编译阶段直接报错。这就是编译器成为你的第一道测试防线的典型体现。五、类型守卫Narrowing让字面量联合发挥运行时价值字面量联合的另一个核心用途是配合 TypeScript 的类型收窄narrowing。仓库 narrowing.md 指出TypeScript 收窄是指在条件分支内细化变量类型的过程对联合类型尤其有用。其中与字面量类型最相关的是相等性收窄Equality narrowing——通过、!、、!或switch语句把变量的类型缩小到某个具体字面量const checkStatus (status: success | error) { switch (status) { case success: return true; case error: return null; } };在这个例子里进入case success分支后status的类型从success | error被收窄为success因此编译器知道该分支的处理逻辑只针对成功态case error同理。这正是字面量联合类型在运行时控制流中体现价值的经典场景——类型系统在编译期就已完整枚举了所有可能分支配合exhaustiveness-checking穷尽性检查见仓库 exhaustiveness-checking.md还能保证switch覆盖所有情况。其他收窄方式如typeof类型守卫、真值收窄、in操作符收窄、instanceof收窄虽然也常与联合类型一起出现但只有相等性/switch收窄直接作用于字面量值本身是字面量类型的专属搭档。六、模板字面量类型字面量的组合与运算字面量类型还能参与模板字面量类型的组合运算在类型系统内部对文本进行拼接与操作。仓库 template-union-types.md 给出了这一能力的最小示例type Status active | inactive; type Products p1 | p2; type ProductId id-${Products}-${Status}; // 展开后为 // id-p1-active | id-p1-inactive | id-p2-active | id-p2-inactive模板字面量类型Template Literal Types会在联合类型的每一个成员上做笛卡尔积展开把字符串拼接从运行时提前到了编译期。基于这个能力可以进一步构造出强大的类型工具例如// 为对象键生成事件名集合 type Events click | hover; type EventHandlerMap { [K in Events as on${CapitalizeK}]: () void; }; // 生成 { onClick: () void; onHover: () void }在实际业务中常见用法包括ID 前缀规范id-user-123、事件名称生成onClick/onInput、状态机合法状态组合如draft/published与操作组合等都可以在编译期获得全量校验。七、字面量类型在项目中的最佳实践结合本仓库书籍内容的整体编排table-of-contents.md 可见本书共 50 余个章节从原语类型、类型注解逐步深入到映射类型、条件类型可以提炼出字面量类型的使用建议优先用字面量联合替代随意字符串对函数参数、对象属性使用type Status active | inactive这样的窄类型编译器能在编码期拦截拼写错误与非法值而不是留到运行时才发现。理解const与let的推断差异const产生字面量类型、let拓宽为宽泛类型对象属性默认被拓宽需要精确值时可使用as const或显式类型断言参见 type-annotations.md 中对象字面量总是补充类型的建议。与穷尽性检查配合对字面量联合做switch收窄时配合never类型的穷尽性检查见 never-type.md 与 exhaustiveness-checking.md确保未来新增枚举成员时编译器立刻提示未覆盖的分支。善用模板字面量类型做文本级约束当字符串需要满足特定格式如带前缀、带后缀、多段组合时用模板字面量类型在编译期表达格式约束。保持类型窄化遵循本书一贯的更窄类型更安全理念——字面量联合比宽泛string更安全、更能表达领域语义。需要说明的是本文所引用的推断规则、联合类型、收窄机制与模板字面量类型分别在本仓库的 literal-inference.md、union-type.md、narrowing.md、template-union-types.md 中有独立成章的详细讲解各语言版本的对应章节位于website/src/content/docs/locale/book/目录下如韩文版 ko-kr/book/literal-types.md、中文版 zh-cn/book/literal-types.md可交叉阅读。小结字面量类型是 TypeScript 类型系统中把值变为类型的基础设施它定义了精确到单个 JavaScript 原始值的类型并借助const/let推断规则、联合类型、类型别名、相等性收窄与模板字面量类型构建出编译期可校验的领域模型。掌握字面量类型是理解 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点击查看免费下载相关推荐深入理解 TypeScript 字面量类型Literal Types从基础到实战——以《The Concise TypeScript Book》为例深入理解 TypeScript 字面量类型Literal Types从基础到实战——以《The Concise TypeScript Book》为例 本文文档教程The Concise TypeScript Book深入理解 TypeScript 字面量类型Literal TypesThe Concise TypeScript Book深入理解 TypeScript 字面量类型Literal Types 字面量类型Literal T文档教程The Concise TypeScript Book 精讲条件类型Conditional Types从语法到实战The Concise TypeScript Book 精讲条件类型Conditional Types从语法到实战 条件类型Conditional Ty文档教程上一篇LinkSwift网盘直链下载助手3分钟解锁九大网盘高速下载的完整指南下一篇LinkSwift网盘直链下载助手如何5分钟实现9大网盘满速下载创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
乌鲁木齐全屋定制推荐:适合大宅意式设计的品牌分析 乌鲁木齐全屋定制指南:大宅意式设计的品牌选择与考量在乌鲁木齐进行家庭装修规划时,获取一份客观的乌鲁木齐全屋定制推荐参考清单,往往是业主开启装修旅程的重要一步。需要明确的是,本文旨在基于公开的市场信息、品牌定位差异以及… · 2026/9/27 9:57:36
Operit 数据救援:Preferences DataStore 配置文件健康检测与保全优先修复实战 AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆 【免费下载链接】Operit The most powerful AI agent and AI chat software on Android/Operit是一款Android上能力最为强大、发展最久的AI Agent 项目地址: https://gitcode.com/gh_mirrors/o… · 2026/9/27 9:57:36
wordpress上传至哪个目录下免费工具推荐 1个目录搞懂WordPress上传路径:图解步骤避坑指南 找建站公司,最怕的就是花大价钱却被忽悠装到错误目录,导致网站打不开或无法上传文件。别急,这套图解步骤能帮你一眼看穿真相,省下冤枉钱。… · 2026/9/27 9:57:36
一个云主机怎么挂两个网站速查手册:小白避坑指南 一个云主机怎么挂两个网站速查手册:小白避坑指南 自己不会代码想做网站,最怕的就是搞懂服务器配置后,发现资源不够用或者怕配错了把站搞崩。很多人以为一台云主机只能跑一个站,其实只要会配置… · 2026/9/27 10:56:21
Agilent 53150A频率计:高精度时间测量与Allan方差实战指南 1. 这台“老伙计”不是摆设:Agilent 53150A 频率计的真实定位与不可替代性你可能在实验室角落见过它——深灰色金属机箱,前面板布满密密麻麻的BNC接口、LED指示灯和一块略带泛黄的LCD屏。它不像新买的示波器那样有炫酷的触摸界面,也不像频谱仪… · 2026/9/27 10:56:03
rsuite Dropdown 图标定制实战:在菜单项中使用图标、快捷键与自定义渲染 前端UI组件 【免费下载链接】rsuite 🧱 A suite of React components . 项目地址: https://gitcode.com/gh_mirrors/rs/rsuite 点击查看 免费下载 rsuite 的 Dropdown 组件用于创建易于访问的下拉菜单,为用户提供多项可选操作。本文围绕文档… · 2026/9/27 10:55:57
新手向的 OpCore-Simplify 实操指南:把 OpenCore EFI 制作从两天压缩到半小时 新手向的 OpCore-Simplify 实操指南:把 OpenCore EFI 制作从两天压缩到半小时 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify
OpCore-Simp… · 2026/9/27 10:55:57
告别论文焦虑!汇写论文AI智能写作一站搞定 每年毕业季,"论文"两个字就像一块沉甸甸的石头,压在无数专科、本科、硕士乃至博士学子的心头。选题没有方向、文献查不全、框架搭不起来、写出来的重复率居高不下、AIGC率一查就超标……一环卡住,步步被动。如今,这一切… · 2026/9/27 10:55:57
pixi 全局清单(Global Manifest)完全指南:pixi-global.toml 的结构、位置与全部配置项 开发工具CLI包管理器任务调度 【免费下载链接】pixi Powerful system-level package manager for Linux, macOS and Windows written in Rust – building on top of the Conda ecosystem. 项目地址: https://gitcode.com/gh_mirrors/pi/pixi 点击查看 免费下载 pi… · 2026/9/27 10:55:51
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01