TypeScript: module에서 특정 class를 전역에 노출하기

생각보다 간단하지 않으면서도 간단하다.

module Foo {
    export class Bar {
        x: number
    } 

    /* Some more interfaces and classes to be used only in this module */
}
interface Bar extends Foo.Bar {
}
var Bar = Foo.Bar;

var Bar = Foo.Bar;만 있어도 컴파일된 자바스크립트를 쓰는 데에는 아무 지장이 없지만, TypeScript에서 Bar를 type identifier로 인식하지 못해 문제가 생긴다. interface를 정의해 줌으로써 이 문제를 해결할 수 있다.

이렇게 하면 아래와 같이 Foo.Bar 대신 Bar란 이름으로 Bar class를 전역에서 사용할 수 있다.

var bar = new Bar();
function something(bar: Bar) {

}

업데이트 (22/7/2014 2:57 AM): 아래와 같이 import를 사용하는 방법도 있다. 그러나 이 방식을 이용하면 d.ts 파일은 더이상 Bar에 대한 타입 정보를 global에 노출하지 않는다. 따라서 사용할 때 매번 import를 해 줘야 한다.

module Foo {
    export class Bar {
        x: number
    } 

    /* Some more interfaces and classes to be used only in this module */
}
import Bar = Foo.Bar;
광고

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중