TypeScript: interface와 class를 같은 이름으로 정의하기

2016/4/6: 아래 내용은 더이상 유효하지 않습니다. 이후 언어 스펙이 개선되어 interface와 class를 간단하게 같은 이름으로 정의할 수 있습니다. #3333을 참조하세요.

타입만 선언하는 일은 비교적 간단히 가능하지만, 정의하는 것은 조금 더 까다롭다. 아래는 lib.d.ts에 들어 있는 선언문의 한 예이다.

interface UIEvent extends Event {
    detail: number;
    view: Window;
    initUIEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number): void;
}
declare var UIEvent: {
    prototype: UIEvent;
    new (): UIEvent;
}

아래 코드는 TypeScript에서 직접 클래스를 정의할 때 쓸 수 있다.

interface Foo {
    hello();
}

class _Foo implements Foo {
    hello() {
        console.log('hello');
    }
}

var Foo: { prototype: Foo; new (): Foo } = _Foo;

new Foo().hello(); // 작동한다.

테스트는 여기에서 해 볼 수 있다. (IE는 설정에서 콘솔 메시지 항상 보기를 켜 줘야 되는지 안 되는지 확인이 가능하다)

광고

답글 남기기

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

WordPress.com 로고

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

Google photo

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

Twitter 사진

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

Facebook 사진

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

%s에 연결하는 중