lodash流函数应如何在打字稿中键入?

用户名

lodash.flow 结合了两个或多个功能。

lodash.flow(double, addTwo)将返回一个函数,该函数将加倍并加两个。如何在打字稿中键入此函数(当前定义仅返回Function)?

declare function flow<In, Intermediate, Out>(f1: (a1: In) => Intermediate, f2: (a1: Intermediate) => Out): (a1: In)=> Out适用于两个函数,第一个具有一个输入参数。我不确定如何在所有情况下都可以使用该定义。

如果这样调用,我的尝试可以支持多种功能:

lodash.flow(f1, lodash.flow(f2, f3))

但我正在寻找

lodash.flow(f1, f2, f3)

帕斯

我不相信您可以编写该定义。

如果我们查看lodash类型声明文件,则它们不会尝试表达这种关系。

interface LoDashStatic {
    flow<TResult extends Function>(...funcs: Function[]): TResult;
}

但是,仅凭这一点还不足以打消这种可能性。作者可能只是忽略了一些东西,所以让我们继续考虑一下。

您可以表示单个功能链之间的关系。在上面的示例中,您已经这样做了。您可以为多个长度的参数创建相同想法的手动版本,但这是因为您正在设置一种情况,其中链的长度是已知的,并且您可以授予单个类型信息。

如果要处理可变长度参数的情况,则必须将这些参数视为Collection因为所有变量都必须具有单个(尽管可能是参数化的)类型,所以此集合对象也必须具有单个类型。但是,各种功能的类型不一致。(param:A) => B与的类型不同,(param:B) => C并且不能存储在相同的类型良好的容器中(限制并集类型,但也不会缩放)。

在要在这样的参数列表上保留类型信息的情况下,通常可以在两个参数上定义组合函数,并将其应用于多个函数。例如,这就是类型信息在promise中保留的方式。为此,您仍然需要阐明每个单独的参数。这样一来,到最后您就拥有了正确的输出类型。就是说,在大多数情况下,这就是您想要的,这一切都很好。

如果lodash用一种类型正确的函数式语言编写,则该流函数可能将不存在。我想它会被改写为管道组成的对象。

更新:当我说“管道合成对象”时,我是什么意思?可能是这样的:

class FunctionComposer<T,V> {
    constructor(protected func: (param: T) => V) { }

    public compose<X>(newFunc: (param:V) => X) {
        return new FunctionComposer((x: T) => newFunc(this.func(x)));
    }
    public out() {
        return this.func;
    }
}

let composedFunc = new FunctionComposer((x: number) => x * 2)
    .compose(x => x.toString())
    .out();

// composedFunc has type (param:number) => string

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用接口在打字稿中键入匿名对象

来自分类Dev

我如何在打字稿构造函数之外正确使用angular $ timeout服务?

来自分类Dev

如何在打字稿中“返回”外部函数定义

来自分类Dev

如何在打字稿中提取函数的类型?

来自分类Dev

如何在打字稿中的构造函数中初始化const字段?

来自分类Dev

在打字稿中,如何从“ lodash / merge”导入合并

来自分类Dev

在打字稿中键入时使用变量字符串

来自分类Dev

如何在打字稿中键入以防止返回值

来自分类Dev

我如何在打字稿中的嵌套for ... in循环中正确键入索引签名?

来自分类Dev

如何在打字稿中的对象文字中键入带有“ this”的方法?

来自分类Dev

如何在打字稿的函数参数中添加默认值?

来自分类Dev

如何在打字稿中键入部分应用的函数?

来自分类Dev

如何在打字稿中键入通用合并功能

来自分类Dev

将类用作变量并在打字稿中键入

来自分类Dev

如何在打字稿中实现具有多个匿名函数的接口

来自分类Dev

如何在打字稿中使用不同类型的通用键键入对象

来自分类Dev

如何在打字稿中制作一种类型的函数链(数组)?

来自分类Dev

如何在打字稿中键入以下对象/类型

来自分类Dev

如何在打字稿中使用函数参数类型?

来自分类Dev

如何在打字稿中使用多种类型的数组调用map函数

来自分类Dev

如何在打字稿中键入对象键?

来自分类Dev

如何在打字稿中有条件地设置函数参数类型?

来自分类Dev

在打字稿中键入交集

来自分类Dev

在打字稿中如何在函数中编写http服务

来自分类Dev

我如何在打字稿中使用默认和可选参数调用函数

来自分类Dev

如何在打字稿中的箭头函数中传递参数

来自分类Dev

如何在打字稿/云函数中将地图推送到 firebase 数据库?

来自分类Dev

如何在打字稿中调用自有函数

来自分类Dev

如何在打字稿中导出重载函数

Related 相关文章

  1. 1

    使用接口在打字稿中键入匿名对象

  2. 2

    我如何在打字稿构造函数之外正确使用angular $ timeout服务?

  3. 3

    如何在打字稿中“返回”外部函数定义

  4. 4

    如何在打字稿中提取函数的类型?

  5. 5

    如何在打字稿中的构造函数中初始化const字段?

  6. 6

    在打字稿中,如何从“ lodash / merge”导入合并

  7. 7

    在打字稿中键入时使用变量字符串

  8. 8

    如何在打字稿中键入以防止返回值

  9. 9

    我如何在打字稿中的嵌套for ... in循环中正确键入索引签名?

  10. 10

    如何在打字稿中的对象文字中键入带有“ this”的方法?

  11. 11

    如何在打字稿的函数参数中添加默认值?

  12. 12

    如何在打字稿中键入部分应用的函数?

  13. 13

    如何在打字稿中键入通用合并功能

  14. 14

    将类用作变量并在打字稿中键入

  15. 15

    如何在打字稿中实现具有多个匿名函数的接口

  16. 16

    如何在打字稿中使用不同类型的通用键键入对象

  17. 17

    如何在打字稿中制作一种类型的函数链(数组)?

  18. 18

    如何在打字稿中键入以下对象/类型

  19. 19

    如何在打字稿中使用函数参数类型?

  20. 20

    如何在打字稿中使用多种类型的数组调用map函数

  21. 21

    如何在打字稿中键入对象键?

  22. 22

    如何在打字稿中有条件地设置函数参数类型?

  23. 23

    在打字稿中键入交集

  24. 24

    在打字稿中如何在函数中编写http服务

  25. 25

    我如何在打字稿中使用默认和可选参数调用函数

  26. 26

    如何在打字稿中的箭头函数中传递参数

  27. 27

    如何在打字稿/云函数中将地图推送到 firebase 数据库?

  28. 28

    如何在打字稿中调用自有函数

  29. 29

    如何在打字稿中导出重载函数

热门标签

归档