我遇到以下情况:
module MyModule {
export class Image {
...
}
var image = Image(); // returns an instance of MyModule.Image
}
但是,我想创建一个HTMLImageElement实例,而不是MyModule.Image。如何指定我想实例化一个驻留在全局模块/命名空间中的类?
谢谢!
答案 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
。有趣的是,它在其他接口上工作正常,并且如前所述,它可以正确编译。