带有requireJs的TypeScript用于编码模块化方式

时间:2012-11-05 11:19:21

标签: requirejs typescript

define(["require", "exports", "js/models/home","templates/home/home.html"
], function(require, exports, __model__, __homeView__) {

    var model = __model__;
    var homeView=__homeView__;


}

我想写一个.ts文件,它会生成一个js这样的文件。

通过编译--module amd,我可以导入模型并引用jquerybackboneJs或任何其他js文件。 但是,如何像html一样导入externer requireJs文件?

3 个答案:

答案 0 :(得分:9)

我刚才在一个博客上写了一篇关于require.js和Typescript的文章 http://blorkfish.wordpress.com/2012/10/23/typescript-organizing-your-code-with-amd-modules-and-require-js/
要导入文本文件,您需要引用text.js,然后使用文本!< ...您的文本文件>语法,如下所示。使用require.config进一步简化了require:

的使用
require.config({
    baseUrl: '../',
    paths: {
        views: 'app/views',
        'text': 'lib/text',
    }
});

require([
    'text!views/MTodoCollectionView.html'],
    (MTodoCollectionViewSnippet) => {
        // 
    });

答案 1 :(得分:2)

我刚刚发现了一个非常简洁的解决方案,用于将带有requirejs文本插件的文本模板作为打字稿模块加载:

假设您配置了像blorkfish这样的require.js:

require.config({
  baseUrl: '../',
  paths: {
      views: 'app/views',
      'text': 'lib/text',
  }
});

您可以执行以下操作,以便直接从打字稿中加载文本:

declare module "text!views/myview.html" {} 
import view = module("text!views/myview.html");

export class MyViewCtrl { //or whatever thingy you want impl in your typescript module
...
checkoutThisTemplate() {
    console.log(view); //will print the template as text to console
}
...

生成的JS看起来与您的完全相同:

define(["require", "exports", "text!views/myview.html"],       
    function(require, exports, , __view__) {
        var view = __view__;
....

答案 2 :(得分:1)

我不认为TypeScript编译器对此有支持,但如果我错了,我很乐意纠正。你可以开始discussion around this feature on Codeplex

只要声明define函数,就可以在TypeScript文件中手动设置。

declare function define(...params: any[]): void;

define(["require", "exports", "js/models/home","templates/home/home.html"
], function (require, exports, __model__, __homeView__) {

    var model = __model__;
    var homeView = __homeView__;
});

如果你想在回调中进行类型检查,你需要有点时髦,尽管目前modelhomeView的类型为any。如果你有一个特定的例子,我可以尝试为你创建一些东西,但我怀疑它会涉及为你的模块添加一个声明(你可以使用针对TypeScript编译器的标志自动生成)。