在typescript中扩展角度全局对象

时间:2014-08-13 07:04:18

标签: javascript angularjs typescript

我正在使用Angularjs和Typescript,我想用这样的自定义函数扩展角度对象:

angular.executeAfterDigest(function(){...});

我该怎么回事呢?我怀疑我需要以某种方式扩展IAngularStatic或者我可以使用angular.prototype之类的东西吗? (我对扩展javascript对象的开始并不是很有经验)。

创建一个反而注入的“angularHelperService”可能更合适。

3 个答案:

答案 0 :(得分:3)

通过添加到界面:https://github.com/borisyankov/DefinitelyTyped/blob/master/angularjs/angular.d.ts#L9

告诉打字稿
declare module ng {
    interface IAngularStatic {
        executeAfterDigest:Function;
    }
}

更新

我不想更改angular.d.ts,因为它是第三方组件

你不会把它放在angular.d.ts中。您可以将其放在globals.d.ts(或vendor.d.ts)中,以记录您在 项目中自定义供应商库(此处为角度)的方式。

请记住:接口开放式

答案 1 :(得分:1)

更新当前状态:

basarat 的答案对我没有用,它在我的应用程序中打破了IAngularStatic键入,但是将其添加到我的global.d.ts中修复了自定义角度扩展功能问题:

declare namespace angular {
    interface IAngularStatic {
        copyData:Function;
    }
}

我从 basarat 链接的绝对类型结构中导出了declare module ngdeclare namespace angular的变化: https://github.com/borisyankov/DefinitelyTyped/blob/master/angularjs/angular.d.ts#L9

答案 2 :(得分:0)

由于angular是一个单例实例,你可以这样做:

angular.executeAfterDigest = function(fn) {
    setTimeout(fn,0);
}

当您调用它时,无法保证在摘要后执行。您必须确保仅在$scope.$$phase$digest$apply时才会调用它。基本上,它只会在你处于棱角分明的世界时起作用。