我最近更新了我的typescript项目中的angular.d.ts文件.我现在在指令定义中得到一个打字稿编译错误.我在更新的angular.d.ts文件中注意到以下内容:
interface IDirectiveFactory { (...args: any[]): IDirective; }
我试图找出如何实现此接口.
我得到这个编译错误:类型ng.DirectiveFactory需要一个调用签名,但类型“MyDirective”缺少.
这就是我的指令现在看起来的样子(以前使用较旧的angular.d.ts文件可以正常工作):
class MyDirective{ constructor() { var directive: ng.IDirective = <ng.IDirective>{}; directive.priority = 0; directive.restrict = "E"; directive.scope = {...}; directive.template = '<div></div>'; directive.link = {...} return directive; } }
这是我用angular注册MyDirective类的地方:
angular.module("MyModule",[]) .directive('myDirective',MyDirective);
上面的编译器错误很有意义,但是如何实现(… args:any []):IDirective签名)?
提前致谢
解决方法
指令()的旧签名曾经是……
directive(name: string,directiveFactory: Function): IModule;
将类用作函数是合法的.但this commit将签名更改为:
directive(name: string,directiveFactory: IDirectiveFactory): IModule;
IDirectiveFactory是一个返回IDirective的函数,因此directive()不再接受directiveFactory参数的类.把它改成……
function MyDirective () : ng.IDirective { var directive: ng.IDirective = <ng.IDirective>{}; directive.priority = 0; directive.restrict = "E"; directive.scope = {}; directive.template = '<div></div>'; return directive; } angular.module("MyModule",[]) .directive('myDirective',MyDirective);