繁体   English   中英

如何在打字稿打字时支持从lodash扩展函数中的无限参数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM