Angular 承诺内的角度加载图像无法通过resolve()传递图像对象
我答应加载一个图像。我只想在加载后打印出图像大小。我的image.width和image.height出现错误 “类型{}上不存在属性'width'。” 我错过了什么Angular 承诺内的角度加载图像无法通过resolve()传递图像对象,angular,typescript,promise,Angular,Typescript,Promise,我答应加载一个图像。我只想在加载后打印出图像大小。我的image.width和image.height出现错误 “类型{}上不存在属性'width'。” 我错过了什么 addImageProcess(src){ return new Promise((resolve, reject) => { let img = new Image() img.addEventListener("load", () => resolve(img)); im
addImageProcess(src){
return new Promise((resolve, reject) => {
let img = new Image()
img.addEventListener("load", () => resolve(img));
img.addEventListener("error", err => reject(err));
img.src = src;
})
}
this.addImageProcess(imgData)
.then(img => console.log("------ image.width = " + img.width + ", image.height = " + img.height))
.catch(err => console.error(err));
您需要明确说明您正在创建什么样的承诺,因为typescript本身无法自动理解这一点。因此,在您的typescript版本中,它默认为
Promise
,并且从中可以看到Promise
。空对象和unknown
都没有width属性,因此稍后会出现错误
修复方法是向addImageProcess添加显式返回类型:
addImageProcess(src: string): Promise<HTMLImageElement>{
return new Promise((resolve, reject) => {
let img = new Image()
img.addEventListener("load", () => resolve(img));
img.addEventListener("error", err => reject(err));
img.src = src;
})
}
addImageProcess(src:string):承诺{
返回新承诺((解决、拒绝)=>{
设img=newimage()
img.addEventListener(“加载”,()=>resolve(img));
img.addEventListener(“error”,err=>reject(err));
img.src=src;
})
}
或者将其添加到承诺构造函数本身:
addImageProcess(src: string) {
return new Promise<HTMLImageElement>((resolve, reject) => {
let img = new Image()
img.addEventListener("load", () => resolve(img));
img.addEventListener("error", err => reject(err));
img.src = src;
})
}
addImageProcess(src:string){
返回新承诺((解决、拒绝)=>{
设img=newimage()
img.addEventListener(“加载”,()=>resolve(img));
img.addEventListener(“error”,err=>reject(err));
img.src=src;
})
}
或者,如果您愿意,也可以两者兼而有之:)