Я просто тестую машинопис у VisualStudio 2012 і маю проблеми з його типовою системою. На моєму html-сайті розміщено тег полотна з ідентифікатором "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. Однак я думав, що цю проблему можна легко вирішити. Я щойно додав пояснення про тип полотна:
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 насправді не підтримує динамічне виклик, і мою проблему можна вирішити за допомогою typecasts. Моє запитання - це в основному дублікат цього типу TypeScript: кастинг HTMLElement
CanvasRenderingContext2D
замістьany
типу.