TypeScript中支持BigInt的枚举替代方案咨询
TypeScript BigInt 枚举替代方案
TypeScript原生枚举不支持BigInt类型,你用对象字面量的方案是可行的,只需补充类型定义即可解决报错问题,具体实现步骤如下:
1. 定义常量对象并锁定类型
用as const定义包含BigInt值的对象,让TypeScript推断出每个值的具体字面量类型,避免宽泛的bigint类型:
const Perms = { None: 0n, Basic: 1n, Edit: 2n, Admin: 4n } as const;
2. 提取对应类型
从对象中提取值的类型,这样就能在函数参数中像使用枚举类型一样引用:
type Perms = typeof Perms[keyof typeof Perms];
3. 类型安全的按位运算函数
现在可以在hasPermission函数中正常使用Perms作为类型,注意按位运算的比较值要使用0n(BigInt类型)而非0:
interface Role { permissions?: bigint; } function hasPermission(role: Role, permission: Perms): boolean { return (role.permissions! & permission) !== 0n; }
报错原因说明
你之前遇到的'Perms' refers to a value, but is being used as a type here错误,是因为Perms本身是一个对象值,不是TypeScript类型。通过typeof Perms获取对象的类型,再用keyof typeof Perms遍历对象的键,最终提取出所有值的类型,就能解决这个问题。
这个方案完全满足你对BigInt按位运算的需求,同时保留了类似枚举的类型安全特性。
内容的提问来源于stack exchange,提问作者infinitesimal
相关产品推荐
相关产品推荐

