[英]TypeScript error from valid JavaScript
以下代碼是有效的JavaScript,但在打字稿中會引發以下錯誤。 知道為什么嗎?
錯誤7名稱“ gameloop”在當前范圍中不存在
(function gameloop() {
window.requestAnimationFrame(gameloop);
})();
編輯:第一個答案后注意到與實際問題無關的復制和粘貼錯誤。
那只是一個缺少的分號,從而使其在Javascript和Typescript中都無法正確使用。
這應該工作:
var game = new Game(); // <== don't forget ';' here
(function gameloop() {
// stats.update();
game.step();
game.update();
game.draw();
window.requestAnimationFrame(gameloop);
})();
不要依靠自動分號插入:規則太復雜了。
在您的情況下,編譯器發現
... new Game()(something) ...
並且它沒有足夠的信息來不認為傳遞給函數new Game()
的參數是something
。 因此錯誤...
得到它了。 錯誤與功能范圍有關。 所以我需要這個
(function gameloop() {
window.requestAnimationFrame(this.gameloop);
})();
即使它符合Javascript的要求。
(function gameloop() {
window.requestAnimationFrame(gameloop);
})();
我也遇到了這個問題,但是它需要另外解決。 就我而言,我使用TypeScript中的window.requestAnimationFrame,然后在Chrome上運行代碼。 但是,出現運行時錯誤,“窗口沒有requestAnimationFrame”。 這是因為requestAnimationFrame在Chrome中仍然是前綴。 您將需要在TypeScript聲明中添加前綴聲明,或者只是將JavaScript文件添加到您的項目中,以標准方式展開window.requestAnimationFrame;
// requestAnimFrame shim with setTimeout fallback
window.requestAnimationFrame = (function () {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function (callback) {
window.setTimeout(callback, 1000 / 60);
};
})();
我使用polyfill方法使requestAnimationFrame在chrome上工作,因為它是一種常見的解決方法。 polyfill本身可以用純TypeScript編寫,並帶有大量轉換,但是Javascript簡潔明了,您可以在Chrome刪除前綴時將其刪除,而不會影響您的TypeScript。
還要注意,當前在所述函數表達式中調用命名函數表達式存在一個問題,這可能會在類似於上面的代碼中咬住您。 即,以下代碼即使有效,也會給您注釋中顯示的錯誤:
function a() {
var x = function b() {
b(); // <-- "**The name 'b' does not exist in the current scope**"
}
}
根據ECMAScript規范的第13節這是有效的,但當前失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.