带有属性的函数的 TypeScript 接口

Posted

技术标签:

【中文标题】带有属性的函数的 TypeScript 接口【英文标题】:TypeScript interface for function with properties 【发布时间】:2015-12-20 00:00:34 【问题描述】:

我在 Angular.js 项目中使用 TypeScript 并使用 Jasmine 进行测试。

当我使用spyOn 模拟对象上的方法时,Jasmine 会将该方法替换为具有calls 属性的函数,以便您可以执行例如thing.method.calls.count()

问题是 TypeScript 编译器不知道方法上的 calls 属性并给出编译器错误:

property 'calls' does not exist on type '() => IPromise<IReport[]>'

如何解决此错误?我是否需要定义一个具有函数签名和对象属性的新接口?我尝试过使用不同的界面配置,但到目前为止没有运气。

【问题讨论】:

你是否从确定类型的 repo 中提取了 jasmine.d.ts? 是的,我引用了 jasmine.d.ts。 【参考方案1】:

如何解决这个错误?

基本上在globals.d.ts之类的文件中添加Function接口。演示:

interface Function 
    calls: any;


var foo = ()=>null;
foo.calls; // okay 

这里介绍了这个技巧:https://basarat.gitbooks.io/typescript/content/docs/types/lib.d.ts.html

【讨论】:

我注意到您没有记录如何在用户定义的 global.d.ts 文件中正确连接。能详细点吗?

以上是关于带有属性的函数的 TypeScript 接口的主要内容,如果未能解决你的问题,请参考以下文章

typescript 带有函数类型的TS接口

TypeScript 接口向下转换

用于接口属性的 TypeScript jsdoc

从0开始的TypeScriptの九:接口Interfaces · 中

从0开始的TypeScriptの九:接口Interfaces · 中

TypeScript接口