Ich teste nur Typoskript in VisualStudio 2012 und habe ein Problem mit dem Typsystem. Meine HTML-Site hat ein Canvas-Tag mit der ID "mycanvas". Ich versuche ein Rechteck auf diese Leinwand zu zeichnen. Hier ist der Code
var canvas = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Leider beschwert sich VisualStudio darüber
Die Eigenschaft 'getContext' ist für den Wert vom Typ 'HTMLElement' nicht vorhanden.
Es markiert die zweite Zeile als Fehler. Ich dachte, dies wäre nur eine Warnung, aber der Code wird nicht kompiliert. VisualStudio sagt das
Es gab Build-Fehler. Möchten Sie fortfahren und den letzten erfolgreichen Build ausführen?
Dieser Fehler hat mir überhaupt nicht gefallen. Warum gibt es keinen dynamischen Methodenaufruf? Immerhin existiert die Methode getContext definitiv auf meinem Canvas-Element. Ich dachte jedoch, dieses Problem wäre leicht zu lösen. Ich habe gerade eine Typanmerkung für Canvas hinzugefügt:
var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Aber das Typensystem war immer noch nicht zufrieden. Hier ist die neue Fehlermeldung, diesmal in der ersten Zeile:
'HTMLElement' kann nicht in 'HTMLCanvasElement' konvertiert werden: Typ 'HTMLElement' fehlt die Eigenschaft 'toDataURL' vom Typ 'HTMLCanvasElement'
Nun, ich bin ganz auf statisches Tippen aus, aber das macht die Sprache unbrauchbar. Was möchte das Typsystem von mir?
AKTUALISIEREN:
Typescript unterstützt in der Tat keinen dynamischen Aufruf und mein Problem kann mit Typecasts gelöst werden. Meine Frage ist im Grunde ein Duplikat dieses einen TypeScript: Casting HTMLElement
CanvasRenderingContext2D
anstelle vonany
Typ für den Canvas-Kontext zu verwenden.