2012-10-08 2 views
4

나는 다음과 같은 상황을 가지고 :타이프 : 전역 모듈에 액세스 클래스/네임 스페이스

module MyModule { 
    export class Image { 
     ... 
    } 

    var image = Image(); // returns an instance of MyModule.Image 
} 

는 그러나, 나는 HTMLImageElement하지 MyModule.Image의 인스턴스를 만들려고합니다. 전역 모듈/네임 스페이스에있는 클래스를 인스턴스화하도록 지정하려면 어떻게합니까?

감사합니다.

답변

2

여러 가지가 있지만 어떤 방식 으로든 document.createElement을 사용하는 것이 좋습니다. 예를 들면 다음과 같습니다.

var image = <HTMLImageElement>document.createElement('img'); 

이 기능을 사용하면 편리한 기능이나 클래스를 만들 수 있습니다.

var ImageElement = Image; 

... 

export class Image { 
    ... 
} 

var image = new ImageElement() 
그러나

HTMLImageElement 인스턴스로 인식되지 않습니다, 즉 어떤 적절한 코드 완성 : 다른 방법

하나는 클래스 정의하기 전에 원래 이미지 클래스에 대한 참조를 만들 예를 들어 것 .

편집는 :

interface Window { 
    Image: new(width?: number, height?: number) => HTMLImageElement; 
} 

제대로 컴파일 (즉, 오류없이),하지만 비주얼 스튜디오에서 같이 신고 한 : 여기 내 작동하지 않는 코멘트에서 언급 Window 인터페이스를 확장하기 위해 시도이다 Duplicate Identifier 'Image'이라는 오류가 발생하고 new window.Image()을 통해 인스턴스를 만들려고하면 new expressions only valid on constructors이라는 플래그가 지정됩니다. 흥미롭게도 다른 인터페이스에서 잘 작동하며 이미 언급했듯이 올바르게 컴파일됩니다.

+0

감사합니다. 이것은 내 특별한 경우에 도움이되지만 전역 네임 스페이스를 처리 할 연산자가 있다면 유용 할 것입니다. – vexator

+0

예. 'window.Image'에 접근 할 수있는 것은 또한 그것을 할 것이지만,'Image'는'Window' 인터페이스 상에 정의되어 있지 않습니다. 그리고 나 자신도 그것을 정의 할 수 없었습니다. – ndm