VisualStudio 2012でtypescriptをテストしているだけで、型システムに問題があります。私のHTMLサイトには、 "mycanvas"というIDを持つキャンバスタグがあります。私はこのキャンバスに長方形を描こうとしています。ここでTypeScript:型システムの問題
var canvas = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
は、残念ながら、VisualStudioをそれはエラーとして第2のラインをマーク
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が確実に存在します。しかし、私はこの問題を解決するのが簡単だと思った。キャンバスのタイプ注釈を追加したばかりです:
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'
は、まあ、私は静的型付けのためにすべてのアウトだが、これは言語が使用できなくなります。タイプシステムは私に何をしたいのですか?
UPDATE:
活字体が実際に動的呼び出しをサポートしていませんし、私の問題は、型キャストで解決することができます。
var canvas : any = document.getElementById("mycanvas");
var ctx = canvas.getContext("2d");
あなたはlib.d.tsに異なる種類を見ることができます:私の質問は基本的にこの1 TypeScript: casting HTMLElement
カンバスコンテキストに 'any'型の代わりに' CanvasRenderingContext2D'を使う方が良いことに言及することは重要です。 –
TypeScript 1.8以降、定数文字列引数 '' 2d "'が認識され、 '.getContext(" 2d ")'はCanvasRenderingContext2D型で返されます。明示的にキャストする必要はありません。 –