Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 承诺内的角度加载图像无法通过resolve()传递图像对象_Angular_Typescript_Promise - Fatal编程技术网

Angular 承诺内的角度加载图像无法通过resolve()传递图像对象

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

我答应加载一个图像。我只想在加载后打印出图像大小。我的image.width和image.height出现错误

“类型{}上不存在属性'width'。”

我错过了什么

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;
})
}
或者,如果您愿意,也可以两者兼而有之:)