angular - “HTMLElement”类型的参数不能分配给“CanvasImageSource”类型的参数
问题描述
我正在尝试将相同的图像加载到我的 HTML 中的所有画布中。我以前用 javascript 编写了整个网页,但现在我正在学习 angular 和 typescript。
我在 Visual Studio Code 中突出显示了这个错误:
“HTMLElement”类型的参数不能分配给“CanvasImageSource”类型的参数。“HTMLElement”类型缺少“HTMLVideoElement”类型的以下属性:height、msHorizontalMirror、msIsLayoutOptimalForPlayback、msIsStereo3D 和 80 more.ts(2345)
但是我没有在控制台中显示任何错误。我可以让图像加载到画布内的 HTML 上(所以它正在工作)。
这是我的 ts:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-map',
templateUrl: './map.component.html',
styleUrls: ['./map.component.scss']
})
export class MapComponent implements OnInit {
constructor() { }
ngOnInit() {
document.querySelectorAll("canvas").forEach(c=>{
var ctx = c.getContext("2d");
var img = document.getElementById("P43");
ctx.drawImage(img,0,0,106,50); //(image, offsetx, offsety, x, y)
});
}
}
VS Code 突出显示这一行的错误ctx.drawImage(img,0,0,106,50); //(image, offsetx, offsety, x, y)
,它突出显示img并显示错误。
我试图搜索这个,但我发现的唯一解决方案是当你有标签的 ID 时(我没有,因为它在页面上都是画布。)或者如果有输入。
任何帮助表示赞赏。
解决方案
您必须告诉编译器该img
变量被设置为HTMLImageElement
.
该ctx.drawImage
方法需要一个:
HTMLOrSVGImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap;
如果您P43
是画布,则必须执行以下操作:
const img = document.getElementById("P43") as HTMLCanvasElement;
如果是图像元素:
const img = document.getElementById("P43") as HTMLImageElement;
实际检查该元素是否实际上是正确的类型会更好Element
。您可以使用instanceof
. TypeScript 编译器还将选择 if 语句,并且在 if 语句中,img
变量将是HTMLCanvasElement
编译器的 a,因此不再需要显式转换:
const img = document.getElementById("P43");
if (img instanceof HTMLImageElement) {
ctx.drawImage(img,0,0,106,50);
} else {
// wrong element!
}
推荐阅读
- java - 无法解析主机“firebasestorage.googleapis.com”:没有与主机名关联的地址
- flutter - 在 Flutter 应用中创建 StreamProvider 需要更正
- c++ - 我想实现一个 BST 并尝试使用向量作为输入
- dataweave - 如何在 Mule 4 的对象数组中选择最后一个重复对象
- python - 我应该使用 Excel 来管理类和属性吗?
- php - 无法访问“主页”OJS 3211 + OldGregg
- html - 使用 html5 音频元素设置错误的 currentTime
- javascript - 如何使用 Hooks 在反应中延迟触发函数
- git - 基于 Git 时间戳的自动同步
- python - 六边形上的 Kivy Stencil 以 Screen 作为父级,如果父级是窗口,但以 ScreenManager 作为父级,它会出现错误?