如何简化键值为对应属性名字符串的JS对象声明 消除重复代码
无重复实现方案
你要的这种键值字符串完全相等的对象,有两种常用的无重复书写实现方式:
- 利用ES6对象属性简写(适合常量数量不多的场景)
如果提前定义好和键同名的变量,对象声明时可以省略赋值部分:
const x = 'x', y = 'y', z = 'z'; const X = { x, y, z };
- 批量生成(适合常量数量多的场景)
如果有大量同类键值对,可以遍历键名数组批量生成:
const X = Object.fromEntries( ['x', 'y', 'z'].map(key => [key, key]) );
这类写法的作用
生产环境中这类键值完全相同的常量对象,本质是字符串枚举集合,核心作用是规避硬编码魔法字符串的问题,具体收益包括:
- 降低维护成本:后续需要修改某个值时,只需要修改常量定义处即可,不需要全局搜索替换零散的字符串
- 减少拼写错误:直接引用常量时IDE会提供自动补全,远比对着手写字符串拼写可靠
- 方便统一校验:可以直接用
Object.values(X).includes(xxx)快速判断某个值是否属于合法枚举范围,不需要重复写全所有合法值做判断 - 适配TS类型系统:可以直接基于这个常量生成对应的联合类型
type XEnum = typeof X[keyof typeof X],不需要单独重复声明类型定义
内容的提问来源于stack exchange,提问作者thanat0sis
相关产品推荐
相关产品推荐

