conditionMerge
package version >0.1.1
shadcn any version
author: cmtlyt
update time: 2026/04/01 16:07:21
conditionMerge 是一个基于条件合并对象或数组的工具,支持灵活的语法和完整的类型推断。可以根据条件动态合并多个数据源,适用于配置管理、样式组合、数据聚合等场景。
特性
- 灵活的语法:支持数组和对象两种条件定义方式
- 类型安全:完整的 TypeScript 类型推断
- 默认值支持:通过
fullback提供条件不满足时的默认值 - 自动过滤:自动过滤值为
undefined的属性 - 多类型支持:同时支持对象和数组的条件合并
install
npm
shadcn
usage
基础用法
数组语法
使用数组格式定义条件:[condition, value, fullback?]
对象语法
使用对象格式定义条件:{ condition, value, fullback? }
多参数调用
也可以直接传递多个条件项作为参数:
对象合并
基础对象合并
条件不满足时使用默认值
自动过滤 undefined
数组合并
基础数组合并
条件不满足时使用默认值
使用场景
配置管理
根据环境变量动态合并配置:
样式组合
根据条件动态组合样式对象:
权限控制
根据用户权限动态生成菜单:
API 请求参数
根据条件构建请求参数:
组件属性组合
根据条件组合组件属性:
API
conditionMerge(...input)
根据条件合并对象或数组。
参数
- input:
ConditionItem[]|ConditionItem[]- 条件项数组,或多个条件项作为参数传递
- 每个条件项可以是数组格式
[condition, value, fullback?]或对象格式{ condition, value, fullback? }
返回值
- 返回值:
T- 合并后的对象或数组
类型定义
参数说明
- condition:
boolean- 条件判断,为
true时使用value,为false时使用fullback
- 条件判断,为
- value:
Record<PropertyKey, any> | any[]- 条件满足时的值,必须是对象或数组
- fullback?:
Record<PropertyKey, any> | any[]- 条件不满足时的默认值,必须是对象或数组,可选
最佳实践
1. 使用有意义的条件变量
2. 合理使用 fullback
3. 避免条件冲突
4. 使用对象语法提高可读性
5. 链式使用条件
注意事项
- value 和 fullback 必须是对象或数组:如果不是对象或数组,会抛出错误
- 类型必须一致:所有条件项的 value 类型必须一致(都是对象或都是数组)
- undefined 会被自动过滤:值为
undefined的属性不会出现在最终结果中 - 条件顺序很重要:后面的条件会覆盖前面条件中相同的属性
- 布尔类型的条件:如果条件是布尔类型(
boolean),TypeScript 会推断为联合类型 - fullback 是可选的:如果不提供 fullback,条件不满足时会使用空对象或空数组
- 多参数调用:可以使用多参数调用方式,但所有参数必须是条件项
- 类型推断:TypeScript 会根据条件自动推断返回值的类型