在typescript中扩展angular全局对象

extending angular global object in typescript

本文关键字:全局 对象 angular 扩展 typescript      更新时间:2023-09-26

我正在使用Angularjs和Typescript,我想用一个自定义函数来扩展angular对象,像这样:

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

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

也许创建一个被注入的"angularHelperService"更合适。

通过添加到接口来告诉typescript: https://github.com/borisyankov/DefinitelyTyped/blob/master/angularjs/angular.d.ts#L9

declare module ng {
    interface IAngularStatic {
        executeAfterDigest:Function;
    }
}
<标题> 更新

我不希望改变angular. d.s,因为它是一个第三方组件

你不会把它放在angular.d.ts中。您可以将其放在globals.d.ts(或vendor.d.ts)中,以记录您如何自定义项目中使用的供应商库(这里是angular)。

记住:接口是开放的

更新当前状态:

basarat的答案没有为我工作,它打破了IAngularStatic类型在我的应用程序中,但将它添加到我的global. d.s中修复了自定义角扩展函数的问题:

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

因为angular是一个单例实例,所以你可以这样做:

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

调用它时,不能保证它在摘要之后执行。您必须确保只有当$scope.$$phase$digest$apply时才调用它。基本上,它只会在你的角度世界中起作用。