我试图创建一个图片加载类,但是在数组定义中,尽管在代码中稍后创建了一个图像对象,但它会抛出错误name "Image" not found
。
class ImageLoader {
static toLoadCount:number = 0;
private static images = Array<Image>();
static onAllLoaded() {};
static onImageLoad() {
--Images.toLoadCount;
if(Images.toLoadCount == 0)
Images.onAllLoaded();
}
static load(path: string) {
++Images.toLoadCount;
let img = new Image();
img.src = "Images/" + path;
img.onload = Images.onImageLoad;
Images.images[path.substring(0, path.length - 4)] = img;
return img;
}
static allImagesLoaded() {
return (Images.toLoadCount == 0);
}
[key: string]: any;
}
答案 0 :(得分:4)
我很遗憾无法发表评论,因为我没有足够的代表,但我只是想为Aleksey L's解决方案添加一件事。
通常,如果您使用的是VS-Code或Webstorm或任何具有智能感知的编辑器,您可以将鼠标悬停在“new Image()
”上,它会告诉您它的类型。
所以在这种情况下你会知道img实际上是一个HTMLImageElement:
let img: HTMLImageElement = new Image();
然后您会立即发现您的数组不正确,因为图片不是type Image
而是类型HTMLImageElement
,您可以立即将数组调整为HTMLImageElement[]
。
KR, 乔治
P.S。:我很乐意,如果你赞成这个,我讨厌这么长的帖子,而不是简短的评论。
答案 1 :(得分:2)
new Image()
的结果为HTMLImageElement
,因此数组的正确输入为
images: Array<HTMLImageElement>
或images: HTMLImageElement[]
:
class ImageLoader {
static toLoadCount: number = 0;
private static images: HTMLImageElement[] = [];
static onAllLoaded() { };
static onImageLoad() {
--ImageLoader.toLoadCount;
if (ImageLoader.toLoadCount == 0)
ImageLoader.onAllLoaded();
}
...
}