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

名义类型构造器:用类与交叉类型模拟名义类型系统

通过私有的类字段或交叉类型标记,实现类似Java/C#的名义类型,防止结构兼容性导致的赋值错误。 · 难度:入门 · +10XP

名义类型构造器

TypeScript是结构类型系统,但很多场景需要名义类型(nominal typing),例如数据库ID、货币类型等。本教程对比三种实现方式:使用类(私有成员)、使用交叉类型(品牌标记)、使用枚举(union discrimination)。重点展示如何编写一个泛型构造器 Brand,使得BrandBrand互不兼容。同时讨论运行时性能与编译开销。

// 泛型品牌构造器
declare const brand: unique symbol;
type Brand = T & { [brand]: B };

function createUserId(raw: string): Brand { // 验证逻辑 return raw as Brand; }

function getPost(id: Brand) {}

const uid = createUserId('abc'); getPost(uid); // 类型错误:不能将UserId赋值给PostId

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

🏆 学习排行

加载中...

📊 统计

📖 200 篇
0 完成
🔥 0