私はVisualStudio 2012でtypescriptをテストしているだけで、その型システムに問題があります。私のHTMLサイトには、「mycanvas」というIDのcanvasタグがあります。このキャンバスに長方形を描こうとしています。これがコードです
var canvas = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
残念ながらVisualStudioは不平を言います
プロパティ「getContext」は、タイプ「HTMLElement」の値に存在しません
2行目をエラーとしてマークします。これは単なる警告だと思いましたが、コードはコンパイルされません。VisualStudioはそれを言う
ビルドエラーがありました。最後に成功したビルドを続行して実行しますか?
このエラーはまったく気に入らなかった。動的メソッド呼び出しがないのはなぜですか?結局のところ、getContextメソッドは間違いなくcanvas要素に存在しています。しかし、この問題は簡単に解決できると思いました。canvasの型注釈を追加しました:
var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
しかし、型システムはまだ満足されていませんでした。これが新しいエラーメッセージです。今回は1行目にあります。
「HTMLElement」を「HTMLCanvasElement」に変換できません:タイプ「HTMLElement」にタイプ「HTMLCanvasElement」のプロパティ「toDataURL」がありません
まあ、私はすべて静的型付けに専念していますが、これにより言語が使用できなくなります。型システムは私に何をしたいですか?
更新:
Typescriptは確かに動的呼び出しをサポートしておらず、私の問題はタイプキャストで解決できます。私の質問は基本的にはこの1つのTypeScriptの複製です:HTMLElementのキャスト
CanvasRenderingContext2D
では、any
タイプの代わりに使用する方がよいことを言及する価値があります。