[英]How to support unlimited parameters in extend function from lodash in typing of typescript?
我使用从 lodash extend
来“连接”参数中的对象,如下所示:
import { extend } from 'lodash';
const foo1 = { item: 1 };
const foo2 = { item: 1 };
const foo3 = { item: 1 };
const foo4 = { item: 1 };
const foo5 = { item: 1 };
const foo6 = { item: 1 };
const b = extend(foo1, foo2, foo3, foo4, foo5, foo6);
问题是在 5 个参数之后b
的类型变成了unknown
。
我的意思是当它只是: extend(foo1, foo2, foo3, foo4, foo5);
类型是正确的。 但是当它extend(foo1, foo2, foo3, foo4, foo5, foo6);
转向unknown
。
我该如何解决这个问题以支持无限参数?
extend
与扩展运算符完全不同。 我传递了extend
Proxy
对象,该对象使用扩展运算符处理得不好。如果您查看 lodash 的类型,您会看到extend
:
interface LoDashStatic {
/**
* @see _.extend
*/
extend<TObject, TSource>(object: TObject, source: TSource): TObject & TSource;
/**
* @see _.extend
*/
extend<TObject, TSource1, TSource2>(object: TObject, source1: TSource1, source2: TSource2): TObject & TSource1 & TSource2;
/**
* @see _.extend
*/
extend<TObject, TSource1, TSource2, TSource3>(object: TObject, source1: TSource1, source2: TSource2, source3: TSource3): TObject & TSource1 & TSource2 & TSource3;
/**
* @see _.extend
*/
extend<TObject, TSource1, TSource2, TSource3, TSource4>(object: TObject, source1: TSource1, source2: TSource2, source3: TSource3, source4: TSource4): TObject & TSource1 & TSource2 & TSource3 & TSource4;
/**
* @see _.extend
*/
extend<TObject>(object: TObject): TObject;
/**
* @see _.extend
*/
extend<TResult>(object: any, ...otherArgs: any[]): TResult;
}
注意一个、两个、三个和四个源参数是如何显式重载的,但除此之外还有一个包罗万象的重载。 如果你想支持更多,你可以添加到 lodash 的类型来做更多的重载,但要注意有一个上限。
您始终可以组合呼叫,以便您保持在每个单独呼叫的显式重载中:
extend(foo1, extend(foo2, foo3, foo4, foo5, foo6));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.