TypeScript:全局模块/命名空间中的访问类

时间:2012-10-08 09:39:14

标签: typescript

我遇到以下情况:

module MyModule {
    export class Image {
        ...
    }

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

但是,我想创建一个HTMLImageElement实例,而不是MyModule.Image。如何指定我想实例化一个驻留在全局模块/命名空间中的类?

谢谢!

1 个答案:

答案 0 :(得分:2)

有很多方法,但我建议以任何方式使用document.createElement。例如:

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

您可以创建便利函数或类来为您包装。

其他一种方法是在类定义之前创建对原始Image类的引用:

var ImageElement = Image;

...

export class Image {
    ...
}

var image = new ImageElement()

但是它不会被识别为HTMLImageElement实例,即没有适当的代码完成。

编辑:这是我的非工作尝试扩充评论中提到的Window界面:

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

它正确编译(即没有错误),但在Visual Studio中它被标记为错误,说Duplicate Identifier 'Image',并且尝试通过new window.Image()创建实例的行为标记为new expressions only valid on constructors。有趣的是,它在其他接口上工作正常,并且如前所述,它可以正确编译。