Skip to content

概述

针对 TypeScript 中的枚举(Enum)及常量对象(Const Object),本插件提供了深度集成的鼠标悬停(Hover)扩展功能。它可以自动识别代码结构,生成业务中常用的映射对象与选项列表,并能自动修复代码中的规范遗漏。

使用方法

  1. 悬浮激活:将鼠标悬停在 enumconst 定义的名称(如 EMediaType)上。
  2. 点击修复:在浮窗中点击 ✨ 生成枚举转换
  3. 即刻完成:插件将分析 AST,在定义及其相关声明下方精准插入所需的类型、Map 和 Options。

mm-enum-gen

核心特性

(推荐)方式一. 常量对象

完美支持现代 TypeScript 推荐的 const object 模式。你可以编写一个常量对象作为枚举的基础,插件会自动解析对象属性及其 JSDoc 注释或单行注释。

支持格式:

ts
export const EMediaType = {
  /** 图片 */
  image: 'image',
  /** 视频 */
  video: 'video'
} as const

方式二. 传统枚举

将标准的 enum 定义转换为 Map 和 Options 数组,省去手动编写 Label 的繁琐过程。

原始代码:

ts
export enum ECodeScene {
  /** 注册 */
  REG = 'REG',
  /** 忘记密码 */
  FORGOT = 'FORGOT'
}

智能修复与类型补全

插件在执行转换时,会智能检查当前定义的完整性,并在生成转换代码的同时一键修复:

  • 补全 as const:如果常量对象漏写了 as const,插件将自动在对象末尾添加,确保类型推导为精确的字面量。
  • 补全 type 声明:对于常量对象,若缺失联合类型声明,插件会自动插入:export type EName = (typeof EName)[keyof typeof EName]
  • 智能防重:自动检测是否已生成过转换代码,避免重复插入。
  • 缩进适配:自动识别编辑器当前的缩进配置(Space/Tab),生成代码与原文件风格完美融合。

示例结果

如果你写了一段不规范或不完整的代码:

ts
export const EStatus = {
  /** 成功 */
  success: 1,
  /** 失败 */
  fail: 0
}

执行插件后将自动变为:

ts
export const EStatus = {
  /** 成功 */
  success: 1,
  /** 失败 */
  fail: 0
} as const // <- 自动补全

// 自动补全类型别名
export type EStatus = (typeof EStatus)[keyof typeof EStatus]

/** 键值对映射 */
export const MStatus = {
  [EStatus.success]: '成功',
  [EStatus.fail]: '失败'
}

/** 下拉选项 */
export const OStatus = [
  { value: EStatus.success, label: '成功' },
  { value: EStatus.fail, label: '失败' }
]