VisualStudio 2012 で typescript をテストしているだけで、その型システムに問題があります。私の HTML サイトには、ID「mycanvas」のキャンバス タグがあります。このキャンバスに長方形を描こうとしています。これがコードです
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 はキャンバス要素に確実に存在します。しかし、この問題は簡単に解決できると思いました。キャンバスの型注釈を追加しました。
var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
しかし、型システムはまだ満足していませんでした。これが新しいエラー メッセージです。今回は最初の行にあります。
'HTMLElement' を 'HTMLCanvasElement' に変換できません: タイプ 'HTMLElement' にタイプ 'HTMLCanvasElement' のプロパティ 'toDataURL' がありません
まあ、私は静的型付けに全力を尽くしていますが、これにより言語が使用できなくなります。型システムは私に何をさせたいのですか?
アップデート:
Typescript は実際に動的呼び出しをサポートしておらず、私の問題は型キャストで解決できます。私の質問は基本的に、このTypeScript の複製です: HTMLElement のキャスト