2014-02-11 37 views
28

似乎在编写Typescript时如何实际构造代码的信息与不存在的相邻。如何使用node.js在Typescript中的多个文件中拆分我的模块

我想在节点中创建一个服务器。它有像socket.io这样的外部依赖关系。服务器太大而无法将它全部放在一个文件中(因为大多数情况下我都会这样想),所以我想我会把它分开。我想有每个类在一个单独的文件,我希望能够在整个项目中使用它们,而不需要做一些疯狂喜欢

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

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

我很感激,如果有人可以花时间来一步一步地经历这一步。

回答

28

其实你可以(现在):

文件:class1.ts:

export class Class1 { 
    name: string; 

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

文件: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)中,然后引用构成“模块”的所有实体。

现在,您只需在单个模块文件上引用(导入)即可访问所有类。您仍然在文件之间有一个整齐的分区。

希望这可以帮助任何人仍然期待。

+0

如何从'.class1';'import {Class1} import'Class1 = require(“。class1”);' – Daryl

+0

@Daryl,后者将导入文件作为模块,获取所有导出的项目(可能有多个类/接口等)。 – jmotes

+0

这个解决方案非常酷。我的猜测是'Class1'和'Class2'的每个文件使用'module MyModule {}'的优点,然后执行一个导入{MyModule}来对模块进行合并,如此处所解释的http:// typecript。 codeplex.com/wikipage?title=Modules%20in%20TypeScript&referringTitle=TypeScript%20Documentation – loretoparisi

8

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

对于模块构造建议,this page有一个很好的选项的概要。尤其是,如果每个文件只有一个类,则可以使用export =,以便示例中的第二行代码仅为var vec = new vector();,这将非常简单明了。

+1

但是,这仍然意味着我需要为每个我在每个文件中使用的类都导入一个导入,对吧?这似乎不太实际。这是真的吗? –

+0

我不确定对此有何惊喜/不切实际。在非TypeScript node.js开发中,每个文件都以文件使用的一系列'require'调用开始。 –

+8

好吧,来自C#例如,我只需要使用''使用'指令为单独的命名空间,这似乎很多。我想这只是一个习惯问题。 –

相关问题