ฉันเพิ่งทดสอบ typescript ใน VisualStudio 2012 และมีปัญหากับระบบประเภท ไซต์ html ของฉันมีแท็ก canvas ที่มี id "mycanvas" ฉันกำลังพยายามวาดรูปสี่เหลี่ยมผืนผ้าบนผืนผ้าใบนี้ นี่คือรหัส
var canvas = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
น่าเสียดายที่ VisualStudio บ่นว่า
คุณสมบัติ 'getContext' ไม่มีอยู่ในค่าของชนิด 'HTMLElement'
มันทำเครื่องหมายบรรทัดที่สองว่าเป็นข้อผิดพลาด ฉันคิดว่านี่เป็นเพียงคำเตือน แต่โค้ดไม่ได้รวบรวม VisualStudio บอกอย่างนั้น
มีข้อผิดพลาดในการสร้าง คุณต้องการดำเนินการต่อและเรียกใช้งานสร้างที่ประสบความสำเร็จล่าสุดหรือไม่
ฉันไม่ชอบข้อผิดพลาดนี้เลย เหตุใดจึงไม่มีการเรียกใช้เมธอดแบบไดนามิก หลังจากเมธอด getContext มีอยู่อย่างแน่นอนในองค์ประกอบ canvas ของฉัน อย่างไรก็ตามฉันคิดว่าปัญหานี้จะแก้ได้ง่าย ฉันเพิ่งเพิ่มคำอธิบายประกอบประเภทสำหรับ canvas:
var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
แต่ระบบประเภทยังไม่เป็นที่พอใจ นี่คือข้อความแสดงข้อผิดพลาดใหม่ในครั้งนี้ในบรรทัดแรก:
ไม่สามารถแปลง 'HTMLElement' เป็น 'HTMLCanvasElement': ประเภท 'HTMLElement' ไม่มีคุณสมบัติ 'toDataURL' จากประเภท 'HTMLCanvasElement'
ฉันหมดแล้วสำหรับการพิมพ์แบบคงที่ แต่ทำให้ภาษาใช้ไม่ได้ ระบบประเภทต้องการให้ฉันทำอะไร?
อัพเดท:
typescript ไม่รองรับการเรียกแบบไดนามิกและปัญหาของฉันสามารถแก้ไขได้ด้วยตัวพิมพ์ คำถามของฉันโดยทั่วไปซ้ำกับTypeScriptนี้: การหล่อ HTMLElement
CanvasRenderingContext2D
แทนany
ประเภทสำหรับบริบทผ้าใบ