⚡ 编程实验室🏗️ 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🎮 游戏🏠 网站首页

幻影类型与Symbol品牌化:运行时安全的类型标签

利用交叉类型与唯一Symbol实现编译期与运行时的双重类型安全,避免原始类型误用。 · 难度:入门 · +10XP

幻影类型与Symbol品牌化

幻影类型(phantom type)是一种不占用的类型参数,结合Symbol品牌化(branding),可以在运行时通过唯一标识区分同构数据。例如,将USD与EUR都表示为number,但通过品牌化让编译器禁止直接算术混用。本教程展示如何用交叉类型 & { __brand: unique symbol } 创建品牌类型,并在运行时用Symbol检查有效性。这比单纯依赖编译期检查更适用于I/O边界。

// 定义品牌类型
const usdBrand = Symbol('USD');
type USD = number & { __brand: typeof usdBrand };

const eurBrand = Symbol('EUR'); type EUR = number & { __brand: typeof eurBrand };

function createUSD(amount: number): USD { if (amount < 0) throw new Error('负数金额'); return amount as USD; }

function addUSD(a: USD, b: USD): USD { return (a + b) as USD; }

// 运行时验证 function isUSD(val: unknown): val is USD { return typeof val === 'number' && val >= 0; }

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

🏆 学习排行

加载中...

📊 统计

📖 200 篇
0 完成
🔥 0