首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型记录-如何在运行时解析内部模块

类型记录-如何在运行时解析内部模块
EN

Stack Overflow用户
提问于 2013-01-21 00:53:39
回答 1查看 1.1K关注 0票数 1

从bootstrapper.ts入口点运行的main.ts如下(减去引用标题):

代码语言:javascript
复制
import Dialogs = App.Widgets.Dialogs;
declare var $ : JQueryStatic;


export class Bootstrapper { 
    static SiteLoad() { 
       var dialog = new Dialogs.LoginDialog();
       ...
    }
}

但是,当main.ts试图加载此文件时,第一行将立即引发引用错误。这时,我意识到导入内部模块不会向生成的define文件的.js包装器添加任何依赖项。

那么如何在运行时解析内部模块呢?是因为AMD只与外部模块兼容,而我必须在main.ts的入口点加载内部模块和外部库吗?

与外部模块相比,我更喜欢内部模块的别名语法。上面的代码比使用外部模块语法时要干净得多:

代码语言:javascript
复制
import Dialogs = module("Modules/App.Widgets.Dialogs");
declare var $ : JQueryStatic;


export class Bootstrapper { 
    static SiteLoad() { 
       var dialog = Dialogs.App.Widgets.Dialogs.LoginDialog(); //Seriously?
       ...
    }
}

太丑了。该怎么办呢?

更新:

史蒂夫,你建议的方法是有局限性的。在我最初使用内部模块的方法中,我可以做以下工作:

代码语言:javascript
复制
import Dialogs = App.Widgets.Dialogs;

declare var $ : JQueryStatic;

export class Bootstrapper { 
    static SiteLoad() { 

        var loginDialog1 = new Dialogs.LoginDialog();  //Instantiation      -OK
        var loginDialog2: Dialogs.LoginDialog;         //Type-Declaration   -OK
    }
}

在这种方法中,您建议我失去为类型声明使用别名的能力:

代码语言:javascript
复制
import DialogsModule =  module("Modules/App.Widgets.Dialogs");

var Dialogs : DialogsModule.App.Widgets.Dialogs;

declare var $ : JQueryStatic;

export class Bootstrapper { 
    static SiteLoad() { 

        var loginDialog1 = new Dialogs.LoginDialog();   //Instantiation  -OK        
        var loginDialog2: Dialogs.LoginDialog;  //Type-Declaration -ERROR: The name "Dialogs" does not exist in the current context  
        var loginDialog3: DialogsModule.App.Widgets.Dialogs.LoginDialog;  //Must use full name instead
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-21 09:30:46

您可以将长模块路径化名为:

代码语言:javascript
复制
import DialogModule = module("Modules/App.Widgets.Dialogs");
var dialogs = DialogModule.App.Widgets.Dialogs;
declare var $ : JQueryStatic;

export class Bootstrapper { 
    static SiteLoad() { 
       var dialog = dialogs.LoginDialog();
       ...
    }
}

您可以通过自己包含适当的文件来将AMD与普通的JavaScript混为一谈--但是我建议在您的程序中选择一种模式来使事情更容易理解。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14431115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档