Lodash cond函数TypeScript调用报错问题求助
解决Lodash
cond的TypeScript类型错误 问题根源
- 条件函数参数不兼容:Lodash
cond默认推断条件函数为单参数,但你的a、b是多参数函数,导致类型匹配失败。 - 返回函数参数推断错误:TypeScript无法自动识别
cond返回函数的参数类型,误判为无参函数,引发调用传参报错。
解决方案
1. 定义统一的参数类型
创建兼容所有条件函数参数需求的类型,同时处理参数个数差异:
type CondArgs = [string, string, boolean?];
2. 调整原始函数(推荐)
将b的第三个参数设为可选,避免调用时参数不足:
private a(a: string, b: string) { return false; } private b(a: string, b: number, c?: boolean) { return c ?? false; }
3. 包装条件函数并指定泛型
用包装函数适配cond的参数传递逻辑,同时手动指定泛型明确参数类型:
const func1 = lodash.cond<CondArgs>([ // 包装this.a,接收所有参数并转发对应部分 [(...args: CondArgs) => this.a(args[0], args[1]), () => "执行a匹配后的逻辑"], // 包装this.b,转换参数类型并处理可选值 [(...args: CondArgs) => this.b(args[0], Number(args[1]), args[2]), () => "执行b匹配后的逻辑"], ]);
4. 正确调用返回函数
现在可以按照定义的参数类型调用func1:
// 传递2个参数,触发a的条件判断 const gfg = func1('1', '2'); // 传递3个参数,触发b的条件判断(当a返回false时) const gfg2 = func1('1', '3', true);
核心要点
- 包装函数:解决
cond条件函数与自定义函数的参数个数不匹配问题,确保类型兼容。 - 泛型指定:强制TypeScript识别
cond返回函数的参数类型,消除调用时的参数错误。 - 可选参数:避免因参数个数不一致导致的运行时与类型错误。
内容的提问来源于stack exchange,提问作者aeross
相关产品推荐
相关产品推荐

