Solo estoy probando mecanografiado en VisualStudio 2012 y tengo un problema con su sistema de tipos. Mi sitio html tiene una etiqueta de lienzo con la identificación "mycanvas". Estoy tratando de dibujar un rectángulo en este lienzo. Aqui esta el codigo
var canvas = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Desafortunadamente, VisualStudio se queja de que
la propiedad 'getContext' no existe en el valor de tipo 'HTMLElement'
Marca la segunda línea como un error. Pensé que esto sería simplemente una advertencia, pero el código no se compila. VisualStudio dice que
hubo errores de compilación. ¿Le gustaría continuar y ejecutar la última compilación exitosa?
No me gustó este error en absoluto. ¿Por qué no hay una invocación de método dinámico? Después de todo, el método getContext definitivamente existe en mi elemento de lienzo. Sin embargo, pensé que este problema sería fácil de resolver. Acabo de agregar una anotación de tipo para lienzo:
var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Pero el sistema de tipos todavía no estaba satisfecho. Aquí está el nuevo mensaje de error, esta vez en la primera línea:
No se puede convertir 'HTMLElement' a 'HTMLCanvasElement': Al tipo 'HTMLElement' le falta la propiedad 'toDataURL' del tipo 'HTMLCanvasElement'
Bueno, me inclino por la escritura estática, pero esto hace que el idioma sea inutilizable. ¿Qué quiere el sistema de tipos que haga?
ACTUALIZAR:
De hecho, TypeScript no tiene soporte para la invocación dinámica y mi problema se puede resolver con typecasts. Mi pregunta es básicamente un duplicado de este TypeScript: casting HTMLElement
CanvasRenderingContext2D
lugar deany
escribir para el contexto del lienzo.