Saya baru saja menguji skrip ketikan di VisualStudio 2012 dan memiliki masalah dengan sistem tipenya. Situs html saya memiliki tag kanvas dengan id "mycanvas". Saya mencoba menggambar persegi panjang di kanvas ini. Ini kodenya
var canvas = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Sayangnya VisualStudio mengeluhkan hal itu
properti 'getContext' tidak ada pada nilai tipe 'HTMLElement'
Ini menandai baris kedua sebagai kesalahan. Saya pikir ini hanya akan menjadi peringatan tetapi kode tidak dapat dikompilasi. VisualStudio mengatakan itu
ada kesalahan pembuatan. Apakah Anda ingin melanjutkan dan menjalankan build terakhir yang berhasil?
Saya sama sekali tidak menyukai kesalahan ini. Mengapa tidak ada pemanggilan metode dinamis? Bagaimanapun, metode getContext pasti ada di elemen kanvas saya. Namun saya pikir masalah ini akan mudah diselesaikan. Saya baru saja menambahkan anotasi tipe untuk kanvas:
var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Tapi sistem tipe masih belum memuaskan. Inilah pesan kesalahan baru, kali ini di baris pertama:
Tidak dapat mengonversi 'HTMLElement' menjadi 'HTMLCanvasElement': Jenis 'HTMLElement' tidak memiliki properti 'toDataURL' dari jenis 'HTMLCanvasElement'
Yah, saya habis untuk mengetik statis tetapi ini membuat bahasanya tidak dapat digunakan. Apa yang sistem tipe ingin saya lakukan?
MEMPERBARUI:
Ketik memang tidak mendukung pemanggilan dinamis dan masalah saya dapat diselesaikan dengan typecasts. Pertanyaan saya pada dasarnya adalah duplikat dari TypeScript yang satu ini : casting HTMLElement
CanvasRenderingContext2D
daripadaany
jenis untuk konteks kanvas.