⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

品牌化枚举的穷举检查技巧

利用交叉类型为枚举值附加唯一品牌标签,在编译时强制穷举所有分支。 · 难度:入门 · +10XP

品牌化枚举的穷举检查技巧

当使用 switch 语句处理枚举时,我们常用 never 类型来确保穷举。但传统枚举值可能会被意外扩展。本教程引入“品牌化枚举”模式:通过为每个枚举成员赋予一个独有的品牌类型(如 { readonly __brand: unique symbol }),使类型系统能够精确追踪每个成员的身份。结合条件类型,可以在编译时强制要求所有枚举值都被处理,且任何新增枚举都会导致编译错误。

type BrandedEnum = {
  readonly Red: { readonly __brand: 'Red' }
  readonly Green: { readonly __brand: 'Green' }
}

const E: BrandedEnum = { Red: { __brand: 'Red' }, Green: { __brand: 'Green' } }

type ValueOf = T[keyof T]

function assertNever(x: never): never { throw new Error() }

function handle(color: ValueOf) { switch (color.__brand) { case 'Red': return 'red' case 'Green': return 'green' default: return assertNever(color) } }

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 200 篇
0 完成
🔥 0