你能在 TypeScript 中扩展函数吗?

2024-03-25

我帮助维护一个 JavaScript 库,该库生成间谍函数,使您可以检查传入函数的调用方式(主要用于单元测试)。

该库创建了一个具有附加属性的函数,允许您检查调用。

是否可以创建一个 TypeScript 定义,允许将函数传递给需要函数并具有额外属性的方法?

这是无效的,但类似于:

class Spy extends function {
    wasCalled: () => boolean;
    ...
}

这将允许我将间谍传递到具有以下签名的函数中:

function subjectUnderTest(callback:() => void) {
    ...
}

Yes, TypeScript 手册称之为“混合类型” http://www.typescriptlang.org/docs/handbook/interfaces.html#hybrid-types,因为它是函数类型和常规接口的组合。

interface Spy {
    (foo: string, bar: number) : boolean; // Just an example
    wasCalled() : boolean;
}

var spy : Spy = createASpySomehow();
var result = spy("foo", 123);
if (spy.wasCalled()) {
    // ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

你能在 TypeScript 中扩展函数吗? 的相关文章

随机推荐

  • jquery如何比较两个日期

    第一个使用 id 的有格式 var checkindate check in text 28 07 2011 然后我使用当前日期 var now new Date 它的格式是 Wed Jul 20 2011 19 09 46 GMT 053
  • 在 MathLink 函数中检查中止?

    我刚刚发现这样的MathLink功能为LinkWrite and LinkRead有类似其内部的东西CheckAbort吸收任何中止 并且不会进一步传播它们 这可以很容易地显示为LinkRead link LinkLaunch First
  • 返回由 n 个随机数组成的整数 ArrayList?

    如何创建 RandomArray 方法并让它接受整数 n 并返回由 0 到 255 之间的 n 个随机数组成的整数 ArrayList 换句话说 让返回的数组的大小为 n 我使用的是Java Eclipse 我已经创建了 RandomArr
  • Awesome WM:标题栏的图标是什么意思?

    谁能告诉我标题栏中的图标是什么意思 火箭 加号 明星 我很好奇 查看图标的文件名 第一个组件描述了含义 https github com awesomeWM awesome tree master themes default titleb
  • 多处理池内进程超时

    当我使用以下代码时 池结果总是返回超时 我在做的事情在逻辑上是否不正确 from multiprocessing import Pool Process cpu count def add num return num 1 def add
  • 使用 Tkinter 显示图像

    我正在开发一个使用 Tkinter 和 ImageTk 显示一系列图像的 python 程序 我无法显示多个图像 下面是一个重现该错误的完整小程序 程序直接递归地搜索当前的 jpg 文件 并在用户按 Enter 时显示它们 import T
  • 退出 iPhone 应用程序的按钮是否违反 Apple 的准则? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 iPhone 应用程序中创建一个按钮来退出该应用程序 使用exit 0 按下时 这会违反苹果的人机界面指南吗 Apple 不鼓
  • 是否可以将小黄瓜步骤写在多行上?

    我是小黄瓜语言的新手 在我看来这似乎是非常基本的问题 但我找不到答案 我知道可以在 Gherkin 中编写多行步骤参数 如下所示 Given a blog post named Random with Markdown body Some
  • 如何在文档数据库(NoSQL)中设计基本模式?

    我有一个问题如何验证文档中的基本 JSON 字段 我的意思是假设一个字段是否需要 我的意思是基本上字段验证 我知道文档数据库是无模式的 NOSQL 但在 Mongodb 中 有一个选项 这就是我问的原因 例如 在 Mongodb 中 我们有
  • 如何在 C++ 中重载一元减运算符? [复制]

    这个问题在这里已经有答案了 我正在实现向量类 我需要得到一些向量的反面 是否可以使用运算符重载来定义此方法 这就是我的意思 Vector2f vector1 vector2 这是我希望该操作员完成的任务 Vector2f oppositeV
  • Mercurial diff 在移动/重命名后不起作用

    将文件移动到另一个目录后 我无法再显示两个修订版之间的差异 例如 hg init touch a hg add a hg ci m Added a echo Bli gt gt a hg ci m Bli echo Bla gt gt a
  • 如何使用 TextMate 将 JAR 文件中的库导入到 Java 程序中

    我需要用 Java 编写一个简单的程序 并且希望像使用 TextMate 在 Python 和 Ruby 中编程一样来完成它 我可以编写并运行一个简单的 Hello World 程序 但找不到加载外部库的方法 我只需要使用工作目录中的所有
  • 将 Unix 纪元时间转换为扩展 ISO8601

    我有 3 个表 我想使用日期来处理 但是其中一个表包含 unix 纪元格式的日期 以下是 3 个字段的示例 Table1 2017 02 01T07 58 40 756031Z Table2 2017 02 07T10 16 46Z Tab
  • Android 8.0 设备的本机崩溃 tgkill

    我遇到了 Android 8 0 设备的本机崩溃 仅崩溃 发生在运行 Android 8 的设备上 我在 Android Vitals ANRs crashes 中发现了很多本机崩溃 我无法重现这些问题 设备 均搭载 Android 8 0
  • 如何在需要找到目标文档的地方创建firestore事务

    我正在寻找一种创建 firestore 事务的方法 在该事务中我从查询中找到文档 然后在事务中修改该文档 类似的东西 kotlin firestore runTransaction transaction gt val snapshot t
  • 如何永久设置boot2docker的环境变量

    我尝试将环境变量放在来宾计算机的 var lib boot2docker profile 文件中 然后重新启动它 导出http proxy http 代理 端口 http proxy port 然后我使用以下命令从我的主机 Windows
  • Intellij IDEA 2019.3、JDK 11.0.3 中的 Maven java 项目:无法解析符号“java”但仍可编译

    我拥有的 Intellij IDEA 2019 3 捆绑 JDK 11 0 3 带有项目 JDK 的 Maven 项目 捆绑的 JDK我的问题 对于任何java 导入我收到错误Cannot resolve symbol but我仍然可以正确
  • R across 只找到正值或只找到负值 tidyverse

    在dplyr中逐列运算 https dplyr tidyverse org articles colwise html有这个例子 df lt tibble x c a b y c 1 1 z c 1 1 Find all rows wher
  • 读取并解析 perf.data

    我正在使用命令 perf record 记录 frm linux 的性能计数器 我想使用结果perf data作为其他编程应用程序的输入 你知道我该如何读取和解析其中的数据吗perf data 有没有办法把它改造成 text文件或 csv
  • 你能在 TypeScript 中扩展函数吗?

    我帮助维护一个 JavaScript 库 该库生成间谍函数 使您可以检查传入函数的调用方式 主要用于单元测试 该库创建了一个具有附加属性的函数 允许您检查调用 是否可以创建一个 TypeScript 定义 允许将函数传递给需要函数并具有额外