2017-11-03 2 views
0

내가 타이프 라이터에 새로운 그리고 난 여러 파일에 걸쳐 사용되는 것과 동일한 네임 스페이스에 문제가 파일 .TS선언과 여러 타이프에 걸쳐 사용되는 동일한 네임 스페이스는

import { Model } from './model'; 

export namespace MyCompany { 
    model : Model; 
    export class WebViewer { 
     use() : void { 
     this.model = new Model(); 
     ... 
     } 
     ... 
    } 
} 

파일 index.ts

import { WebViewer } from './webviewer'; 

let webviewer = new WebViewer(); 
webviewer.use(); 

MyCompany.WebViewer 클래스에서 MyCompany.Model을 사용하고 index.ts 파일에서 MyCompany.WebViewer를 사용하는 방법에 대한 문서를 찾을 수 없습니다.

아래의이 문서에는 많은 예제가 들어 있지만 같은 네임 스페이스가 선언되어 동일한 라이브러리의 여러 파일에 사용 된 경우 모두 내 사례를 다루지 않습니다. 이 모든 파일에 네임 스페이스를 사용하여 OK 인 경우

https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#110-namespaces

UPDATE는 지금은 자신을 부탁 해요. 아마도 클래스가 네임 스페이스 내에서 내보낼 수있는 .d.ts 파일을 사용하는 방법이 있습니다. 나중에 라이브러리를 Acme.WebViewer 등으로 사용할 수 있습니다.

답변

1

네임 스페이스의 기본 개념은 이름 충돌을 방지하는 것입니다. 팀의 다른 개발자가 다른 Model 클래스를 원했고 자신의 것을 알지 못했습니까?)

네임 스페이스는 문제를 좀 더 세련되게 해결하기 때문에 모듈을 도입 할 때 조금 쓸모 없게되었습니다. 당신은 다음을 수행하고 모두 네임 스페이스를 건너 뛸 수 :

export class Model { 
    // ... 
} 

webviewer.ts을

model.ts

import { Model } from './model'; 

export class WebViewer { 
    private model: Model; 
    use(): void { 
    this.model = new Model(); 
    } 
} 

index.ts

import { WebViewer } from './webviewer'; 

let webviewer = new WebViewer(); 
webviewer.use(); 
+0

처음 Typescript를 시작했을 때 webpack을 사용하여 전체 빌드 프로세스를 찾거나 다소 협박적이었습니다. Typescript를 배울 때 네임 스페이스는 좋은 중간지다 IMHO – Kokodoko

+0

예제에서 사용 된 모듈은 어디에 있습니까?내가 볼 수있는 유일한 변경 사항은 다음과 같습니다. 모델 필드의 비공개 접근 자 및 네임 스페이스 제거 (저는 TS에 상당히 익숙하지 않아서 바보 같은 질문에 대해 미안합니다). 모듈을 명시 적으로 선언해야한다고 생각했습니다. – Salaros

0

당신은 떠날 수 import 네임 스페이스를 사용할 경우. 네임 스페이스 외부에서 객체를 호출 할 때는 호출에 포함해야합니다 (let m = new MyCompany.Model()). 또한

model.ts

export namespace MyCompany { 
    export class Model { 
     ... 
    } 
} 

webviewer.ts

export namespace MyCompany { 
    export class WebViewer { 
     model : Model; 
     use() : void { 
     this.model = new Model(); 
     } 
    } 
} 

index.ts

let webviewer = new MyCompany.WebViewer(); 
webviewer.use(); 
(모델 변수가 클래스 내에 선언되어야한다) 웹 뷰어에 오타가 있었다
관련 문제