You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:49:58