如何在TypeScript中编写支持任意数量参数的通用OR运算函数
TypeScript 任意参数OR运算实现方案
完全可以实现,我们可以通过剩余参数特性做到支持传入任意数量参数,也支持数组参数的实现方式,同时可以兼容原有两参数函数的调用逻辑和返回行为。
1. 剩余参数版本(兼容旧调用写法)
这个版本不需要改动你原有调用2个参数的代码,同时支持任意多参数传入,行为和原生||完全一致:返回第一个真值,所有参数都为假时返回最后一个参数。
export const performOR = <T>(...args: T[]): T => { // 遍历参数,找到第一个真值直接返回,符合OR短路特性 for (const arg of args) { if (arg) return arg; } return args[args.length - 1]; };
调用示例:
// 原有两参调用完全兼容 const isArg1OrArg2 = performOR(x, y); // 支持任意数量参数 const hasTrueValue = performOR(0, '', false, '有效内容', null); // 上述调用返回结果为 '有效内容',和连续使用 || 的行为完全一致
2. 数组参数版本
如果需要传入参数数组调用,可以使用如下实现:
export const performOR = <T>(args: T[]): T => { for (const arg of args) { if (arg) return arg; } return args[args.length - 1]; };
调用示例:
const paramList = [x, y, z, a, b]; const hasTrueValue = performOR(paramList);
如果不需要保留原始返回值,只需要返回布尔结果,可以直接用数组的some方法简化代码:
// 剩余参数版本返回布尔 export const performOR = <T>(...args: T[]): boolean => args.some(Boolean); // 数组参数版本返回布尔 export const performOR = <T>(args: T[]): boolean => args.some(Boolean);
内容的提问来源于stack exchange,提问作者Ishara M
相关产品推荐
相关产品推荐

