字面量类型用于精确约束单个值为特定字面量,枚举则定义命名常量集合并支持运行时映射;前者轻量无开销,适合类型校验,后者适用于需遍历或反射的场景。

在 TypeScript 中,字面量类型和枚举是两种不同用途的类型机制:字面量类型用于精确约束某个值必须是特定的字面量(如 "success"、404、true),而枚举(enum)则用于定义一组命名的常量集合,带可读性与双向映射能力。它们不是替代关系,而是解决不同建模问题的工具。
字面量类型:精准限定单个值
字面量类型直接用具体值作为类型,常见于字符串、数字、布尔值:
-
字符串字面量类型:
const method: "GET" | "POST" = "GET"; -
数字字面量类型:
const statusCode: 200 | 404 | 500 = 200; -
布尔字面量类型:
const isActive: true | false = true;
单独使用意义有限,通常配合联合类型(|)表达“有限可选值”。也可用类型别名复用:
type HttpMethod = "GET" | "POST" | "PUT" | "DELETE"; type UserRole = "admin" | "editor" | "viewer";
枚举:命名常量集合,自带语义和映射
枚举通过 enum 关键字声明,自动分配数值或手动指定,支持字符串/数值型:
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
-
数值枚举(默认从 0 开始):
enum Status { Pending, Success, Failed } // Status.Pending === 0, Status["Success"] === 1 -
字符串枚举(必须显式赋值):
enum LogLevel { DEBUG = "debug", INFO = "info", ERROR = "error" } - 异构枚举(混用数字与字符串)需谨慎,不推荐用于新项目
枚举成员在编译后生成反向映射(如 Status[0] 得 "Pending"),也支持运行时取值,但会生成额外代码。
关键区别与选用建议
判断该用字面量联合还是枚举,看是否需要以下能力:
- 需要运行时反射或遍历所有可能值 → 选
enum(如渲染下拉菜单选项) - 只做类型校验、无运行时需求、值固定且简单 → 优先用字面量联合(更轻量、无运行时开销)
- 需要严格不可变、防止意外修改 → 可加
const enum(编译期内联,无 JS 输出) - 涉及HTTP 状态码、按钮类型、权限标识等业务常量:字面量联合更常见;涉及状态机、配置分类、多语言键名:枚举更直观
进阶技巧:让字面量类型更实用
字面量类型可结合其他特性增强表达力:
-
与对象类型结合,实现判别联合(Discriminated Union):
type User = | { kind: "guest"; lastVisit: Date } | { kind: "member"; level: "basic" | "premium"; joinDate: Date }; -
用
as const推导字面量类型:const colors = ["red", "blue", "green"] as const; // 类型为 readonly ["red", "blue", "green"],每个元素都是字符串字面量
-
配合泛型约束,确保传入参数属于某组字面量:
function setTheme<t extends>(theme: T) { ... }</t>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










