如何使用Ramda以声明式方式实现带优先级的布尔值到字符串映射
基于Ramda的声明式实现方案
可以用Ramda的R.cond方法完美匹配你当前的优先级判断逻辑,实现完全无点(Point-free)的纯函数式写法:
import * as R from 'ramda'; type FieldType = "dropdown" | "text" | "file" | null; const getFieldType: (field: { isDropdown?: boolean, isTextInput?: boolean, isFileModal?: boolean }) => FieldType = R.cond([ // 优先级从高到低排列规则 [R.propEq('isDropdown', true), R.always('dropdown')], [R.propEq('isTextInput', true), R.always('text')], [R.propEq('isFileModal', true), R.always('file')], // 兜底逻辑,所有条件不匹配时返回null [R.T, R.always(null)] ]);
实现说明
- 完全符合你原本的优先级逻辑,规则数组的顺序就是判断优先级,和原if/else链的执行顺序完全一致
- 纯声明式写法,所有代码都是在描述「判断规则」,不需要手动处理入参、遍历、可选判断等执行细节
- 不需要引入临时变量,整体逻辑更简洁易读,后续要新增字段类型只要在规则数组里按优先级插入对应规则即可,维护成本很低
- 天生内置兜底返回null的逻辑,不需要额外使用可选链、空值合并运算符处理边界情况
内容的提问来源于stack exchange,提问作者user10706046
相关产品推荐
相关产品推荐

