我正在使用AngularJS和TypeScript.我想使用Typescript类实现AngularJS服务,如下所示:

class HelloService {
    public getWelcomeMessage():String {
        return "Hello";
    }
}

angular.module('app.services.helloService', []).factory('helloService', () => {
    return new HelloService();
});

这将编译为以下javascript代码:

var HelloService = (function () {
    function HelloService() {
    }
    HelloService.prototype.getWelcomeMessage = function () {
        return "Hello";
    };
    return HelloService;
})();

angular.module('app.services.helloService', []).factory('helloService', function () {
    return new HelloService();
});

这会用变量HelloService污染全局名称空间,这显然是我不想要的.(使用的是HelloService的Chrome控制台.)我如何解决/避免这个问题?

我try 了显而易见的:

angular.module('app.services.helloService', []).factory('helloService', function () {
    class HelloService { ...} 
    return new HelloService();
});

但这给了我一个编译错误("意外标记;'statement'expected.").

我能想到的一个可能的解决方案是以某种方式使用TypeScript的导入和导出,这反过来又会使用RequireJS.这可能会将HelloService封装在一个define函数中,从而避免HelloService对全局范围的污染.然而,我现在不想在我的AngularJS应用程序中使用RequireJS,因为我认为AngularJS对我来说已经足够好了,而且它增加了复杂性.

所以,我的问题是,如何使用不会污染全局范围的TypeScript类定义AngularJS服务?

推荐答案

我应该提供我实际完成的工作:

module MyModule {
    export class HelloService {
        public getWelcomeMessage():String {
            return "Hello";
        }
    }

    angular.module('app.services.helloService', []).factory('helloService', () => {
        return new HelloService();
    });
}

这样我就可以使用

return new HelloService();

而不是

return new MyModule.HelloService();

Typescript相关问答推荐

mat-table中的动态matHeaderRowDef Angular

错误:note_modules/@types/note/globals.d.ts:72:13 -错误TS 2403:后续变量声明必须具有相同的类型

等待的R没有用响应对象展开到R

为什么从数组中删除一个值会删除打字错误?

未在DIST中正确编译TypeScrip src模块导入

当方法参数和返回类型不相互扩展时如何从类型脚本中的子类推断类型

在不更改类型签名的情况下在数组并集上映射文字

如何解决类型T不能用于索引类型{ A:typeof A; B:typeof B;. }'

使用泛型识别对象值类型

为什么&Quot;元素隐式具有';Any';类型,因为...即使我已经打字了,也不能作为索引显示错误吗?

在打字脚本中对可迭代对象进行可变压缩

界面中数组中的混合类型导致打字错误

创建一个TypeScrip对象并基于来自输入对象的约束定义其类型

在Thunk中间件中输入额外参数时Redux工具包的打字脚本错误

如何使函数参数数组不相交?

在TS泛型和记录类型映射方面有问题

为什么我会得到一个;并不是所有的代码路径都返回一个值0;switch 中的所有情况何时返回或抛出?(来自vsCode/TypeScript)

什么';是并类型A|B的点,其中B是A的子类?

JSX.Element';不可分配给类型';ReactNode';React功能HOC

TypeScript是否不知道其他函数内部的类型判断?