Javascript typescript编译器生成js时出错
我对类型脚本生成的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
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() { ...