我在TeamCity安装中使用Chutzpah 3.2.1命令行来执行一些Typescript单元测试。
我尝试运行时遇到此错误:
[JavaScript Tests] Error: Error in [JavaScript runtime error]:
[11:31:03][JavaScript Tests] C:/TeamCity/buildAgent/work/fd0bdc3857f5e4c1/Claims/Web/Scripts/app/search/SearchController.ts(77,16): error TS2082: Supplied parameters do not match any signature of call target:
[11:31:03][JavaScript Tests] Call signatures of types '(event: ng.IAngularEvent, element: JQuery) => void' and '(event: ng.IAngularEvent, ...args: any[]) => any' are incompatible:
这个有问题的代码是:
$scope.$on(EventConstants.TYPEAHEAD_SELECTED, (event: ng.IAngularEvent, suggestion: FieldTypeaheadSuggestion) => {
this.search(false);
});
angular.d.ts中$ on的定义是:
$on(name: string, listener: (event: IAngularEvent, ...args: any[]) => any): Function;
此代码在VS2013 IDE中编译良好(使用现在内置于VS中的Typescript支持)
我在其他地方读过一些编译器在这里抱怨因为...args: any[]
的d.ts使用意味着参数是可选的,这与传递给$on
的函数的签名冲突功能,需要suggestion
。
但是,IDE并不介意这个问题,那么有没有办法让Chutzpah编译器以相同的方式运行?
答案 0 :(得分:0)
你应该使用Chutzpah的编译设置(在这里阅读:https://chutzpah.codeplex.com/wikipage?title=Using%20the%20compile%20setting&referringTitle=Chutzpah.json%20Settings%20File)。这是在Chutzpah的最新版本中发布的,它允许您告诉Chutzpah如何将代码编译为JS(或者它应该假设JS是外部编译以及在哪里找到它。)
这是现在使用TypeScript和Chutzpah的推荐方法。
答案 1 :(得分:0)
在这里查看Igorbek的诀窍https://github.com/borisyankov/DefinitelyTyped/pull/1467
这似乎更像是一个打字机问题然后是一个Chutzpah问题。
试一试
$scope.$on(EventConstants.TYPEAHEAD_SELECTED, (event: ng.IAngularEvent, suggestion?: FieldTypeaheadSuggestion) => {
this.search(false);
});
在
...args: any[]
签名需要0,1或更多参数。您的示例只指定一个参数。使用"?"指定这些是可选参数,如下所示:
$ scope。$ on(' eventName',(event:ng.IAngularEvent,arg1?,arg2?)