我遇到类型脚本生成的js文件的问题,我无法解决,这是我的服务文件,我有问题:
namespace Providers {
export interface IProvider {
loadTranslations(translations: ITranslations, locale: string);
}
module.provider('lego', LegoProvider);
class LegoProvider implements ng.IServiceProvider ,IProvider{
loadTranslations(translations:ITranslations , locale: string) {
......
}
$get() {
.....
}
}
}
生成的js文件是:
var Providers;
(function (Providers) {
module.provider('lego', LegoProvider); // this is the problem
var LegoProvider = (function () {
function LegoProvider() {
}
LegoProvider.prototype.loadTranslations = function (translations, locale) {
};
LegoProvider.prototype.$get = function () {
};
return LegoProvider;
}());
})(Providers || (Providers = {}));
由于LegoProvider是可变的,它会抛出错误,并且在该行中它仍然是未定义的。当我用这个改变代码时,它可以正常工作:
namespace Providers {
export interface IProvider {
loadTranslations(translations: ITranslations, locale: string);
}
class LegoProvider implements ng.IServiceProvider ,IProvider{
loadTranslations(translations:ITranslations , locale: string) {
......
}
$get() {
.....
}
}
module.provider('lego', LegoProvider); // I've moved this line to bottom
}
在打字稿代码中,可以从两个位置访问LegoProvider类,对我来说第一个位置不起作用没有意义
答案 0 :(得分:1)
它看起来像是一个经典的吊装问题:
生成的js文件有一个提供程序,它实际上是一个构造函数,存储在一个变量中(IIFE为percise):
var LegoProvider = (function () {
function LegoProvider() { ...
当您向应用注册提供商时,该变量尚未初始化,仅被声明。这就是实际发生的事情:
var LegoProvider = undefined; // hoisting
module.provider('lego', LegoProvider);
LegoProvider = (function () {
function LegoProvider() { ...
您的更正已在LegoProvider
课程完全初始化后移动了注册。