Sto solo testando il dattiloscritto in VisualStudio 2012 e ho un problema con il suo sistema di tipi. Il mio sito html ha un tag canvas con l'id "mycanvas". Sto cercando di disegnare un rettangolo su questa tela. Ecco il codice
var canvas = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Purtroppo VisualStudio se ne lamenta
la proprietà 'getContext' non esiste nel valore di tipo 'HTMLElement'
Contrassegna la seconda riga come errore. Ho pensato che questo fosse solo un avvertimento ma il codice non viene compilato. VisualStudio lo dice
c'erano errori di costruzione. Vuoi continuare ed eseguire l'ultima build riuscita?
Non mi è piaciuto affatto questo errore. Perché non c'è invocazione di metodi dinamici? Dopo tutto il metodo getContext esiste sicuramente sul mio elemento canvas. Tuttavia ho pensato che questo problema sarebbe stato facile da risolvere. Ho appena aggiunto un'annotazione di tipo per la tela:
var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Ma il sistema dei tipi non era ancora soddisfatto. Ecco il nuovo messaggio di errore, questa volta nella prima riga:
Impossibile convertire "HTMLElement" in "HTMLCanvasElement": nel tipo "HTMLElement" manca la proprietà "toDataURL" dal tipo "HTMLCanvasElement"
Bene, sono tutto pronto per la digitazione statica, ma questo rende il linguaggio inutilizzabile. Cosa vuole che faccia il sistema di tipi?
AGGIORNARE:
Typescript non ha infatti alcun supporto per l'invocazione dinamica e il mio problema può essere risolto con typecast. La mia domanda è fondamentalmente un duplicato di questo TypeScript: casting HTMLElement
CanvasRenderingContext2D
invece delany
tipo per il contesto della tela.