angularjs – 如何在TypeScript中实现ng.IDirectiveFactory

前端之家收集整理的这篇文章主要介绍了angularjs – 如何在TypeScript中实现ng.IDirectiveFactory前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近更新了我的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);

猜你在找的Angularjs相关文章