Typescript - 加载外部模块并转换为单个JS文件

时间:2012-12-17 11:06:58

标签: typescript

我有一个带有不同外部模块的TypeScript项目。例如,我使用以下语句导入模块,它可以正常工作

import myExternalModule = module("http://mylocalapphost/tsmodules/mod1");
var myObject = new myExternalModule.importedInteface('var1', 'var2');

当我将带有tsc的.ts转换为.js时,我只得到了这个:

var myExternalModule = require("http://mylocalapphost/tsmodules/mod1");

但是我需要在这个.js文件中实现模块,就像内部模块一样。我该怎么办?


这是两个文件(抱歉命名不好......):

// mod1.ts (at a local server)
export class importedClass {
  private prVar: number = 0;
  constructor(public var1: string, public var2: string){}
  public func1(km: number){
    this.prVar += km;
  }
  public getPrVar(){
    return this.prVar;
  }
}

// main.ts
import myExternalModule = module(" path to mod1 ");
var myObject = new myExternalModule.importedClass('string var1', 'string var2');
myObject.func1(20);

结果我想要一个 .js文件,其中包含所有导入的模块/类等,因为应用程序在服务器上运行(没有连接到本地服务器,放置模块的位置),如下所示:

var importedClass = (function () {
    function importedClass(var1, var2) {
        this.var1 = var1;
        this.var2 = var2;
        this.prVar = 0;
    }
    importedClass.prototype.func1 = function (km) {
        this.prVar += km;
    };
    importedClass.prototype.getPrVar = function () {
        return this.prVar;
    };
    return importedClass;
})();
var myObject = new importedClass('string var1', 'string var2');
myObject.func1(20);

1 个答案:

答案 0 :(得分:3)

如果您正在加载外部模块,而不是您有TypeScript代码文件或定义的模块,则最好声明require函数并加载它:

declare var require: any;

var myExternalModule = require("http://mylocalapphost/tsmodules/mod1");
var myObject = new myExternalModule.importedInteface('var1', 'var2');

这将产生以下JavaScript:

var myExternalModule = require("http://mylocalapphost/tsmodules/mod1");
var myObject = new myExternalModule.importedInteface('var1', 'var2');

没有那么不同 - 但你可以选择在TypeScript中为代码添加输入,而不是让它纯粹是动态的!

关于单个JS文件输出 - 如果使用模块加载,那不是真正相关的。您的模块加载器处理在运行时获取文件。