【发布时间】:2021-05-17 16:57:59
【问题描述】:
我是 typescript 的新手,当我为了好玩而制作画布游戏时,我刚开始就遇到了一件奇怪的事情。
// 1) Works but stores HTMLElement, so later fails
const canvas = document.getElementById("game");
// 2) Don't works
const canvas: HTMLCanvasElement = document.getElementById("game");
// 3) Works
const canvas = document.getElementById("game") as HTMLCanvasElement;
// 4) Works
const canvas: HTMLCanvasElement = document.getElementById("game") as HTMLCanvasElement;
遮阳篷是为什么第二个不起作用,它不应该尝试自动转换为声明的类型吗?我认为最后两个过于冗长或不太清楚。我想知道是否有编译器选项,或者这是否只是发生在我身上。提前致谢。
【问题讨论】:
-
如果您确定具有给定选择器的元素的类型,您可以添加将选择器映射到相关类型的重载:
declare global { interface Document { getElementById(id: "game"): HTMLCanvasElement; } }在这种情况下,您不需要类型断言。 -
你也可以这样做:
const element = <HTMLCanvasElement>document.getElementById('canvas');
标签: typescript types casting