2014-02-11 1 views
28

실제로 Typescript를 작성할 때 코드를 구조화하는 방법에 대한 정보가 존재하지 않는 것 같습니다.Typescript에서 node.js를 사용하여 모듈을 여러 파일로 분할하는 방법

노드에 서버를 만들고 싶습니다. socket.io와 같은 외부 종속성을가집니다. 서버가 너무 커서 전체 파일을 하나의 파일에 넣을 수 있습니다 (대부분의 경우를 상상할 수 있습니다). 그래서 그것을 분할 할 것입니다. 나는 별도의 파일에 각각의 클래스를 갖고 싶어하고 나는 그렇게 어떻게

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

미친 듯이 무언가를 할 필요없이 전체 프로젝트에서 사용할 수 있도록하려면? 지금까지 나는 2 개의 전선에서 싸우고있는 것 같습니다. 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

import 클래스 1 = require (".class1");' – Daryl

+0

@Daryl에서'import {Class1};은 (는) "./class1"에서 어떻게 다른가? 파일을 모듈로 가져 와서 내 보낸 모든 항목을 가져옵니다. 그 안에 (잠재적으로 다중 클래스/인터페이스 등). – jmotes

+0

이 솔루션은 매우 멋지다. 내 추측은'Class1'과'Class2'의 각 파일에 대해'module MyModule {}'을 사용하고 import {MyModule}을 사용하여 http : // typescript에 설명 된대로 모듈을 통합하는 이점이 있습니다. 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 개발에서, 모든 파일은 파일이 사용하는 오브젝트에 대한 '요구'호출로 시작됩니다. –

+8

글쎄, 예를 들어 C#에서 오는 것은 별도의 네임 스페이스에'using' 지시어 만 있으면 좋을 것 같습니다. 나는 그저 익숙해 져야 할 문제라고 생각합니다. –

관련 문제