Tôi chỉ đang kiểm tra bản định kiểu trong VisualStudio 2012 và gặp sự cố với hệ thống kiểu của nó. Trang web html của tôi có một thẻ canvas với id "mycanvas". Tôi đang cố vẽ một hình chữ nhật trên canvas này. Đây là mã
var canvas = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Thật không may, VisualStudio phàn nàn rằng
thuộc tính 'getContext' không tồn tại trên giá trị của loại 'HTMLElement'
Nó đánh dấu dòng thứ hai là một lỗi. Tôi nghĩ đây sẽ chỉ là một cảnh báo nhưng mã không biên dịch. VisualStudio nói rằng
có lỗi xây dựng. Bạn có muốn tiếp tục và chạy bản dựng thành công cuối cùng không?
Tôi không thích lỗi này chút nào. Tại sao không có lệnh gọi phương thức động? Sau tất cả, phương thức getContext chắc chắn tồn tại trên phần tử canvas của tôi. Tuy nhiên tôi nghĩ vấn đề này sẽ dễ giải quyết. Tôi vừa thêm một chú thích kiểu cho canvas:
var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
Nhưng hệ thống loại vẫn không hài lòng. Đây là thông báo lỗi mới, lần này là ở dòng đầu tiên:
Không thể chuyển đổi 'HTMLElement' thành 'HTMLCanvasElement': Loại 'HTMLElement' bị thiếu thuộc tính 'toDataURL' từ loại 'HTMLCanvasElement'
Chà, tôi sẵn sàng cho việc nhập tĩnh nhưng điều này khiến ngôn ngữ không sử dụng được. Loại hệ thống muốn tôi làm gì?
CẬP NHẬT:
Typecript thực sự không hỗ trợ cho lệnh gọi động và vấn đề của tôi có thể được giải quyết bằng typecast. Câu hỏi của tôi về cơ bản là một bản sao của TypeScript này : truyền HTMLElement
CanvasRenderingContext2D
thay vìany
loại cho ngữ cảnh canvas.