2014-02-11 76 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#例如,我只需要使用''使用'指令爲單獨的命名空間,這似乎很多。我想這只是一個習慣問題。 –

相關問題