Estou apenas testando o texto digitado no VisualStudio 2012 e tenho um problema com seu sistema de tipos. Meu site html tem uma tag de tela com o id "mycanvas". Estou tentando desenhar um retângulo nesta tela. Aqui está o código
var canvas = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Infelizmente VisualStudio reclama que
a propriedade 'getContext' não existe no valor do tipo 'HTMLElement'
Ele marca a segunda linha como um erro. Achei que fosse apenas um aviso, mas o código não compila. VisualStudio diz que
houve erros de construção. Você gostaria de continuar e executar a última compilação bem-sucedida?
Não gostei nem um pouco desse erro. Por que não há invocação de método dinâmico? Afinal, o método getContext definitivamente existe no meu elemento canvas. Porém achei que esse problema seria fácil de resolver. Acabei de adicionar uma anotação de tipo para tela:
var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Mas o sistema de tipos ainda não estava satisfeito. Esta é a nova mensagem de erro, desta vez na primeira linha:
Não é possível converter 'HTMLElement' em 'HTMLCanvasElement': o tipo 'HTMLElement' está sem a propriedade 'toDataURL' do tipo 'HTMLCanvasElement'
Bem, estou totalmente interessado em digitação estática, mas isso torna a linguagem inutilizável. O que o sistema de tipos quer que eu faça?
ATUALIZAR:
De fato, o typescript não tem suporte para invocação dinâmica e meu problema pode ser resolvido com typecasts. Minha pergunta é basicamente uma duplicata deste TypeScript: casting HTMLElement
CanvasRenderingContext2D
vez deany
digitar para o contexto da tela.