lodash流函数应该如何在typescript中输入?

2023-11-21

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;
}

但仅凭这一点还不足以成为排除这种可能性的理由。作者可能忽略了一些事情,所以让我们继续思考一下。

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

如果我们要处理可变长度参数的情况,我们必须将参数视为收藏。因为所有变量都必须具有单一(尽管可能参数化)类型,所以该集合对象也必须具有单一类型。然而,各种函数的类型并不一致。(param:A) => B与以下类型不同(param:B) => C并且不能存储在同一个类型良好的容器中(除非联合类型,但这些类型也不会扩展)。

在您想要保留像这样的参数列表上的类型信息的情况下,您通常会在两个参数上定义组合函数并将其应用于多个函数。例如,这就是在 Promise 中保留类型信息的方式。为此,您仍然需要详细说明每个单独的参数。它只是让你最终得到正确的输出类型。也就是说,在大多数情况下这就是您想要的,所以一切都很好。

如果 lodash 是用类型良好的函数式语言编写的,那么该流函数可能就不会存在。我想它会被写成一个管道组合对象。

UPDATE:当我说“管道组合对象”时,我的意思是什么?也许是这样的:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lodash流函数应该如何在typescript中输入? 的相关文章

  • 如何使用 jquery 在 ajax 调用中设置标头

    我需要从我自己的应用程序调用 Office 365 Rest API 当我在同一浏览器会话上复制并粘贴 url 时 我可以看到一些 XML 如果我将该 URL 粘贴到隐身窗口中 则会收到以下错误 The custom error modul
  • { ...obj1, obj2 } 到底做什么[重复]

    这个问题在这里已经有答案了 假设我们有两个对象 const state fishes some obj data animals some obj data const animals some NEW data 在Vuex中有一个方法re
  • 使用 ReactJS 突出显示文本

    我试图突出显示与查询匹配的文本 但我不知道如何让标签显示为 HTML 而不是文本 var Component React createClass highlightQuery function name query var regex ne
  • 如何使用 jQuery 在悬停元素旁边显示一个 div?

    假设我有severaldiv 像这样 EDIT div class ProfilePic a href img src lib css img profile pic1 png alt class ProfilePicImg a div c
  • 如何向 DOM 添加支持 Angular 的元素?

    我想以编程方式添加一些支持 Angular 的 DOM 元素 实际上 我可能需要添加自定义组件 我该怎么做 这是一个简单的小提琴来演示这个问题 http jsfiddle net ZJSz4 2 http jsfiddle net ZJSz
  • JavaScript 事件循环:队列、消息队列、事件队列

    阅读了大量 JavaScript 事件循环教程 我看到了不同的术语来标识当调用堆栈为空时准备由事件循环获取的队列存储消息 Queue 消息队列 事件队列 我找不到规范术语来识别这一点 甚至 MDN 似乎也对此感到困惑事件循环页面 https
  • Jquery 选择器中的冒号

    我最近将 jquery 从 1 4 更新到 2 1 并开始出现错误 在我的代码中 我有一部分通过 id 选择元素 jQuery id name 这会产生一个错误 但是之前没有错误 1 4 如果我转义冒号 错误就会消失 他们在最新版本中添加了
  • JavaScript switch 语句是线性的还是恒定时间的?

    我的网站上有以下 JavaScript 以便在执行某些特定搜索时 答案会被硬编码到特定页面 function redirect var input document getElementById searchBox value toLowe
  • Mustache.js 只允许换行,转义其他 HTML

    我正在根据用户输入创建评论 并在用户单击 提交 后使用 Mustache js 渲染它们 我意识到我可以替换用户输入换行符 n with br 呈现为 HTML 中断 例如 myString replace n g br 我意识到我可以使用
  • 即使我的目标是 ES3,TypeScript 输出仍然使用 Array.prototype.reduce

    我在玩了一下 TypeScript 并发现了一些奇怪的地方 假设我正在构建一个小应用程序 遗憾的是 也需要支持 IE8 所以我将 TypeScript 编译器设置为目标 ES3 我以为我可以安全地使用 ECMAScript 5 1 的好东西
  • 如何在 html5 中加载部分 html? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 询问我们的问题推荐或查找工具 库或最喜欢的场外资源与 Stack Overflow 无关 因为它们往往会吸引固执己见的答案和垃圾邮件 反而
  • 样式表何时添加到 document.styleSheets

    我正在尝试使用 javascript 动态添加 css 样式表规则 例如示例 2here https developer mozilla org en DOM CSSStyleSheet insertRule 它在大多数情况下都有效 但似乎
  • Rxjs 带延迟功能的重试

    我正在尝试使用retry with delay函数 我预计函数会在 1000 毫秒延迟后调用 但事实并非如此 这里可能会出现什么错误 查看控制台输出 同一时间 16 22 48 我预计有 16 22 48 16 22 59 canCreat
  • Mapbox 关闭除一层之外的所有图层

    我是 Mapbox 和 javascript 的新手 我试图稍微修改一下 Mapbox GL 代码示例 发现here https www mapbox com mapbox gl js example toggle layers 允许打开
  • 如何在 Strongloop 环回脚手架项目中覆盖基本用户?

    给定一个使用以下命令创建的全新项目 slc lb project myapp 我该如何更换 user 模型中models json带有 customer 模型放置在 models目录 客户应该有登录 注销等方法 并且 用户 不应该作为 AP
  • Google Calendar API:获取指定日期的空闲时段列表

    我需要获取我的谷歌日历中的免费时段列表 现在我只是获取事件列表 我在用谷歌日历 https www npmjs com package google calendar npm google calendar events list calO
  • 对数滑块

    我有一个值范围从 0 到 100 的滑块 我想将它们映射到 100 到 10 000 000 的范围 我在网上看到过一些函数 但它们都是用 C 编写的 我需要它在 JavaScript 中 有任何想法吗 您可以使用这样的函数 functio
  • Django pbkdf2_sha256 JS 实现

    我有一个来自 django 的数据库 我想从 Node js 中使用它 我有一个任务 验证用户身份 从数据库可知 算法 pbkdf2 sha256 salt 10000 次迭代和 base64 编码的哈希值 我必须在 JS 中执行哪些步骤才
  • 为什么事件属性不容易获取?

    我有以下代码 HERE https jsfiddle net 5n2zagjc 2 是可编辑的示例 用法 在输入字段中键入并观看控制台 function test event let keys Object keys event let k
  • 访问 django for 循环中的元素

    我有一个 Django 模板 其中包含以下代码 该模板创建多个按钮并尝试通过单击 在同一按钮上 删除 隐藏其中一个按钮 for h in helicopters div class btn group div

随机推荐

  • 多个小查询与单个长查询。哪一种效率更高?

    以下哪一种方法更有效 单个较长查询 SELECT COUNT AS num FROM SELECT users UID cnumber FROM users JOIN identity ON users UID identity UID W
  • 与多个 Chrome Docker 容器的 Websocket 通信

    我有一个 Chrome 容器 使用这个 Dockerfile 根据应用程序容器的请求呈现页面 基本流程是 应用程序向 Chrome 发送 http 请求 并作为响应接收要使用的 websocket url 例如ws chrome examp
  • 标签位置应固定在右侧并向左增长

    即使标签长度不同 如何将标签设置为右侧对齐 我有一组标签 它们彼此相邻 也彼此下方 现在的问题是它们总是从标签行的左侧对齐 但我需要它们在右侧对齐 因为它们显示其他行的总和 只是为了验证我不是在谈论文本对齐 我正在寻找一种对齐标签的解决方案
  • 单击取消按钮 showInputDialog

    我有一个关于按输入对话框的取消按钮的问题 我以前曾问过类似的问题 所以如果我似乎重复了自己的话 我深表歉意 我遇到的主要问题是 无论我按下取消键 我的代码都会执行 并且即使我不添加任何输入 也会建立套接字连接 为什么会发生这种情况以及如何避
  • Xcode 5 和phonegap:为设备构建链接器错误,但不为模拟器构建链接器错误

    我们的phonegap应用程序对于iPhone模拟器构建得很好 但在iPhone上构建应用程序时会生成链接器错误 唯一改变的是安装 testflight 和测试应用程序 我们已经删除了 testflight 和测试应用程序 但链接器错误仍然
  • Apache Shiro 和 SSO

    Apache Shiro 是一个 Java 安全框架 支持 SSO 我有多个子域 每个子域都有单独的应用程序运行 我如何使用 Apache Shiro Web 过滤器 或任何其他过滤器 来提供单点登录 在使用 Apache Shiro 之前
  • 在 Oracle SQL 中删除表

    每当我尝试删除表或创建表时 它都会显示以下错误 DROP TABLE SUBURB DROP TABLE STOCKITEM DROP TABLE MANUFACTURER DROP TABLE WAREHOUSE DROP TABLE C
  • 重写规则以仅检测数字

    我正在尝试创建一个重写规则 该规则将仅检测数字并相应地转发它们 我希望如果出现除数字以外的任何内容 则忽略重写规则 index php OK OK 42365 重写为view php id 42365 到目前为止我所拥有的 RewriteE
  • 我正在做正确的事情将分贝从 -120 - 0 转换为 0 - 120

    我想测量周围的音量 不太确定我做的是否正确 我想创建一个范围从 0 安静 到 120 非常吵闹 的 VU 表 我得到了峰值功率和平均功率 但在正常安静环境中非常高 请给我一些指示 void viewDidLoad super viewDid
  • 如何最好地消毒 ruby​​ on Rails 中的字段

    我目前有一个控制器从前端的 TinyMCE 捕获一些 html 如果我修补萤火虫 就可以提交脚本标签并将警报消息等注入到屏幕上 编辑 目前我正在使用清理助手在模型中修复此问题 require action view class NotesC
  • 按组有条件 NA 填充

    edit这个问题最初是问的data table 任何包的解决方案都会很有趣 我对一个更普遍的问题的特定变体有点困惑 我有与 data table 一起使用的面板数据 我想使用 data table 的分组功能来填充一些缺失的值 不幸的是它们
  • Python 中的整数到十六进制转换

    a 1 print hex a 上面给了我输出 0x1 我如何获得输出0x01反而 您可以使用format gt gt gt a 1 gt gt gt 0 02x format a 01 gt gt gt 0x 0 02x format a
  • 多线程:我需要在只读方法中保护我的变量吗?

    我对使用锁来保护我的共享数据结构有几个疑问 我正在使用 C C ObjC Objc 例如我有一个在多线程环境中使用的计数器类 class MyCounter private int counter std mutex m public in
  • 来回改变风格

    Code p class demo my text p
  • 如何从PHP中的路径找到图像的扩展名?

    PHP 中是否有任何标准函数可以从相应的文件路径中仅查找图像的扩展名 例如 如果我的图像路径类似于 testdir dir2 image gif 则该函数应返回 gif Thanks ext pathinfo parse url testd
  • Android VirtualBox 共享文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我已经在 VirtualBox 中安装了 Android x86 我从我的主机共享了一个文件夹 该文件夹是 Windows 7 for Virtual Android Machine
  • Angular.Service 与 Angular.Factory

    我都看过角度工厂 and 角度 service 用于声明服务 但是 我找不到 angular service官方文档中的任何地方 这两种方法有什么区别 哪个应该用于什么 假设它们做不同的事情 angular service myServic
  • 与 classList.add 和 getElementsByClassName 作斗争[重复]

    这个问题在这里已经有答案了 我正在尝试向具有特定类 输入字段集 的某些元素添加额外的类 fieldset class input fieldset fieldset fieldset class input fieldset fieldse
  • 从 Jenkins 中的 pom 文件自动派生强制 SonarQube 属性

    情况 我想使用 Jenkins 1 642 4 触发的 SonarQube 5 4 来分析我的项目 这是一个用maven构建的java项目 我看到有两种触发分析的方法 构建后操作 使用 Maven 进行 SonarQube 分析 但它是已弃
  • lodash流函数应该如何在typescript中输入?

    lodash flow结合了两个或多个功能 lodash flow double addTwo 将返回一个函数 该函数将加倍并添加两个 这个函数应该如何在打字稿中输入 当前定义只返回 Function declare function fl