html - TypeScript:类型系统的问题

标签 html typescript types html5-canvas static-typing

我只是在 VisualStudio 2012 中测试 typescript ,它的类型系统有问题。我的 html 网站有一个 canvas 标签,其 id 为“mycanvas”。我正在尝试在此 Canvas 上绘制一个矩形。这是代码

var canvas = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);

不幸的是 VisualStudio 提示说

the property 'getContext' does no exist on value of type 'HTMLElement'

它将第二行标记为错误。我认为这只是一个警告,但代码无法编译。 VisualStudio 说

there were build errors. Would you like to continue and run the last successful build ?

我一点也不喜欢这个错误。为什么没有动态方法调用?毕竟 getContext 方法肯定存在于我的 Canvas 元素上。但是我认为这个问题很容易解决。我刚刚为 Canvas 添加了一个类型注释:

var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);

但类型系统仍然不令人满意。这是新的错误消息,这次在第一行:

Cannot convert 'HTMLElement' to 'HTMLCanvasElement': Type 'HTMLElement' is missing property 'toDataURL' from type 'HTMLCanvasElement'

好吧,我完全支持静态类型,但这会使该语言无法使用。类型系统要我做什么?

更新:

Typescript 确实不支持动态调用,我的问题可以通过类型转换来解决。我的问题基本上是这个问题的重复TypeScript: casting HTMLElement

最佳答案

var canvas = <HTMLCanvasElement> document.getElementById("mycanvas");
var ctx = canvas.getContext("2d");

或使用 any 类型的动态查找(无类型检查):

var canvas : any = document.getElementById("mycanvas");
var ctx = canvas.getContext("2d");

您可以在 lib.d.ts 中查看不同的类型.

关于html - TypeScript:类型系统的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669404/

相关文章:

javascript - 表单字段输入数字通过在前面添加零自动转换为3位数字

angular - 如何在剑道组合框中添加工具提示?

typescript - Angular2 @Inputs 应该公开还是我们可以/应该通过将它们设为私有(private)来拥有更严格的 API?

c# - 一种类型但像变量一样使用?

javascript - 在 Internet Explorer 中禁用文本选择

javascript - 未捕获的类型错误 : Function is not a function

html - 中等公共(public)站点的体面 HTTPs 实现是否始终是付费解决方案?

Angular 4 - 没有将 "exportAs"设置为 "ngForm"的指令

types - Julia 类型的问题

typescript - 如何为通用可选函数参数获得正确的类型推断?