如何在多个项目中使用typescript文件,有些使用模块(node.js),有些不使用?

时间:2016-05-27 06:59:53

标签: javascript node.js typescript typescript1.8

我过去使用的typescript主要是为了在浏览器中运行客户端代码。现在我正在尝试将我的库的一些类重用于node.js.我的设置如下:

  • SharedLibrary 包含多个班级的项目
  • 客户使用SharedLibrary的项目
  • 服务器项目,node.js使用SharedLibrary

Node.js似乎迫使我使用commonjs作为打字稿的模块库。因此,我在服务器端的代码也将被迫使用模块。如何在此项目中包含我的SharedLibrary?似乎模块无法访问模块外的任何东西,除非它本身就是一个模块,但我也无法将我的SharedLibrary更改为模块,因为这会迫使我改变我的整个代码库。如果没有改变一切,有什么方法可以解决这个问题吗?

示例代码: 库文件A.ts:

class A {
    public call() {
        console.log("class A");
    }
}

服务器文件C.ts:

export class C {
    public call(): void {
        console.log("class c");

        let a = new A(); //this will compile but crash during runtime
        a.call();

    }
}

node.js主文件:

import * as myodule from "./C";
var s = new myodule.C();
s.call();

它将打印" class c"然后崩溃,因为它无法找到A级。如果我将导出添加到" A类和#34;它可以正常工作。然后导入它,但我的客户端代码停止工作。

到目前为止我尝试了什么:

  • 直接使用这些文件
  • 使用export关键字在其.ts文件之外导出A类似乎无法正常工作
  • C样式定义可能有用,可选择定义共享库,因为导出或不行,但我无法在typescript中找到类似的东西

1 个答案:

答案 0 :(得分:0)

  

如果不改变一切,有没有办法解决这个问题?

只需在任何地方使用commonjs并使用像webpack这样的模块加载器/捆绑器。以下是快速入门:https://basarat.gitbooks.io/typescript/content/docs/quick/browser.html

实施例

这是一个使用此方法http://alm.tools/

的相当大的项目