Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript typescript编译器生成js时出错_Javascript_Angularjs_Typescript - Fatal编程技术网

Javascript typescript编译器生成js时出错

Javascript typescript编译器生成js时出错,javascript,angularjs,typescript,Javascript,Angularjs,Typescript,我对类型脚本生成的js文件有问题,我无法解决,这是我的服务文件,我有问题: namespace Providers { export interface IProvider { loadTranslations(translations: ITranslations, locale: string); } module.provider('lego', LegoProvider); class LegoProvider implements

我对类型脚本生成的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

}

在typescript代码中,LegoProvider类可以从两个位置访问,第一个位置不起作用对我来说没有意义,这看起来像一个经典的提升问题:

生成的js文件有一个提供程序,它实际上是一个构造函数,存储在一个变量(一个待percise)中:

当您将提供者注册到应用程序时,变量尚未初始化,仅声明。这就是实际发生的情况:

   var LegoProvider = undefined; // hoisting

   module.provider('lego', LegoProvider);

   LegoProvider = (function () {
       function LegoProvider() { ...

您的更正在
LegoProvider
类完全初始化后移动了注册。

您在初始化之前引用的是
LegoProvider
。对我来说,这是一个问题,您可以通过在初始化之后再使用它来解决这个问题。(FWIW,在ES2015中,在源代码中的
class
语句之前,您无法访问通过
class
创建的构造函数;您会得到一个错误。TypeScript显然对它没有那么严格,但基本上看起来是相同的问题。)@T.J.Crowder我如何解决这个问题?你在问题中解决这个问题的方式是唯一对我有意义的方式。是的,我知道,问题是如何在不移动注册线的情况下解决它?
   var LegoProvider = undefined; // hoisting

   module.provider('lego', LegoProvider);

   LegoProvider = (function () {
       function LegoProvider() { ...