最佳答案
我只是在 VisualStudio2012中测试打字脚本,它的类型系统有一个问题。我的 html 站点有一个 id 为“ myscape”的画布标记。我试着在这块画布上画一个长方形。这是密码
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 说
有生成错误。要继续并运行最后一个 建造成功了吗?
我一点也不喜欢这个错误。为什么没有动态方法调用?毕竟 getContext 方法肯定存在于我的画布元素中。但是我认为这个问题很容易解决。我刚刚为画布添加了一个类型注释:
var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
但是类型系统仍然不满意。下面是新的错误消息,这次是在第一行:
无法将“ HTMLElement”转换为“ HTMLCanvasElement”: 类型 类型中缺少“ toDataURL”属性 “ HTMLCanvasElement”
好吧,我完全支持静态类型,但这使得语言无法使用。类型系统要我做什么?
更新:
类型脚本确实不支持动态调用,我的问题可以通过类型转换来解决。我的问题基本上是这一个 TypeScript: 转换 HTMLElement的副本