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

枚举标志序列化与解析问题:如何将整数转换为枚举标志?

TypeScript枚举标志的序列化与解析方案

核心原理

TypeScript数字枚举本质是数字值的别名,位标志枚举的组合值也是合法数字。因此只需完成字符串↔数字的转换,再通过类型断言让TypeScript识别为枚举类型,就能正常使用位运算判断。

步骤实现

1. 序列化(存储到Cookie/localStorage)

将枚举组合值转为数字,再转成字符串存储:

enum CookieOptions {
  None = 0,
  Necessary = 1 << 0,
  Analytical = 1 << 1,
  Marketing = 1 << 2,
  Parsonalisation = 1 << 3,
  All = ~(~0 << 4),
}

// 示例:选择Analytical和Marketing的组合
const selectedOpts = CookieOptions.Analytical | CookieOptions.Marketing;
// 存入localStorage
localStorage.setItem('cookieOpts', String(selectedOpts));
// 存入Cookie同理
document.cookie = `cookieOpts=${selectedOpts}; path=/`;

2. 解析(从存储读取)

将字符串转为数字,断言为枚举类型后即可正常使用位运算:

// 从localStorage读取并解析
const storedStr = localStorage.getItem('cookieOpts');
// 处理空值,默认返回None
const cookieOpts = storedStr ? parseInt(storedStr, 10) as CookieOptions : CookieOptions.None;

// 按位判断标志是否存在
if (cookieOpts & CookieOptions.Analytical) {
  // 执行分析类Cookie相关逻辑
}
if (cookieOpts & CookieOptions.Marketing) {
  // 执行营销类Cookie相关逻辑
}

可选:严谨性验证

如果需要确保解析的值是合法的位组合,可以添加验证函数过滤无效值:

function isValidCookieOpts(value: number): value is CookieOptions {
  // 确保值是0到All之间的合法位组合
  return (value & CookieOptions.All) === value;
}

// 带验证的解析流程
const storedStr = localStorage.getItem('cookieOpts');
let cookieOpts = CookieOptions.None;
if (storedStr) {
  const num = parseInt(storedStr, 10);
  if (isValidCookieOpts(num)) {
    cookieOpts = num;
  }
}

内容的提问来源于stack exchange,提问作者Shlizer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:53:37