如何使用node.js在Typescript中的多个文件中拆分模块

时间:2014-02-11 15:46:53

标签: typescript

似乎在编写Typescript时如何实际构造代码的信息几乎不存在。

我想在节点中创建一个服务器。它有外部依赖,如socket.io。服务器太大了,无法将它全部放在一个文件中(正如我想象的那样大部分时间都是如此)所以我想我会将它拆分。我希望将每个类放在一个单独的文件中,我希望能够在整个项目中使用它们,而不需要做一些疯狂的事情,如

import vector = require("vector.ts");
var vec = new vector.Vector();

我该怎么做?到目前为止,似乎我在两条战线上作战。当我得到tsc实际编译时,节点会在运行时抱怨,但是当我修改代码以便节点可以工作时,它就不会编译。

如果有人可以花时间逐步完成这一步,我会很感激。

3 个答案:

答案 0 :(得分:35)

实际上你可以(现在):

file:class1.ts:

export class Class1 {
  name: string;

  constructor(name: string){
      this.name = name;
  }
}

file:class2.ts:

export class Class2 {
    name: string;
}

合并模块文件:classes.ts:

export { Class1 } from "./class1";
export { Class2 } from "./class2";
消费文件:

import { Class1, Class2 } from "./classes";

let c1 = new Class1("Herbert");
let c2 = new Class2();

通过这种方式,每个文件可以有一个类(或接口)。在一个合并模块文件(classes.ts)中,您可以引用构成“模块”的所有实体。

现在,您只需要在单个模块文件上引用(导入)即可访问所有类。您仍然可以在文件之间进行简洁的划分。

希望这有助于任何人继续寻找。

答案 1 :(得分:8)

TypeScript中尚不支持多文件外部模块。

对于模块结构化建议,this page有很好的选项。特别是,如果每个文件只有一个类,则可以使用export =,以便示例中的第二行代码只是var vec = new vector();,这将是相当简单的。

答案 2 :(得分:0)

对于任何偶然发现此线程(例如我)的人,他们试图为外部模块声明创建一个桶文件,loretoparisi的答案就是解决之道。这是我的示例模块用例。我想为我正在编写的所有第三方声明创建一个桶形声明文件(index.d.ts),但不想将其6 +模块声明放入同一文件中。这就是我所做的。

我有这样的文件夹结构:

src/ 
  index.ts

示例index.ts

import WildEmitter from 'wildemitter';
import SomethingCool from 'somethingcool';

// ... rest of file

我将这样的文件夹结构转换为导入的第三方模块写入声明文件:

src/ 
  index.ts
  /types
    index.d.ts
    /modules
      wildemitter.d.ts
      somethingcool.d.ts

在我的src/types/index.d.ts文件中,我有:

/// <reference path="modules/wildemitter.d.ts" />
/// <reference path="modules/somethingcool.d.ts" />

然后,我可以将模块声明保存在单独的文件中。

src/types/modules/wildemitter.d.ts中,我有:

declare module 'wildemitter' {
  // declarations
}

希望这对某人有帮助!