Portování JavaScript requestAnimFrame na psacím stroji

hlasů
4

Jsem v současné době jak dál se snaží portu tento kód do strojopisem.

if (typeof window !== 'undefined') {
  window.requestAnimFrame = (function(callback){
      return window.requestAnimationFrame ||
      window.webkitRequestAnimationFrame ||
      window.mozRequestAnimationFrame ||
      window.oRequestAnimationFrame ||
      window.msRequestAnimationFrame ||
      function(callback){
          window.setTimeout(callback, 1000 / 60, new Date().getTime());
      };
  })();
}

Došlo k chybě TSC jsem si je:

dodávaná parametry neodpovídají žádný podpis cíle volání

Snažil jsem deklarovat interface WindowEx extends Windowobsahující podpisy, pak lití (< WindowEx>window).xxx, ale pochybuji, že to je správný způsob, jak převést tuto „typický“ kód.

Pokus:

interface WindowEx extends Window {
  requestAnimFrame(callback, target?):number;
  webkitRequestAnimationFrame(callback, target?):number;
  mozRequestAnimationFrame(callback, target?):number;
  oRequestAnimationFrame(callback, target?):number;
  // msRequestAnimationFrame already at WindowAnimationTiming interface
}
Položena 04/10/2012 v 10:43
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Tady je to, co jsem udělal, aby si váš kód kompilovat. Jen jsem je definována requestAnimFrame()jako globální a napsal to tak, že na psacím stroji mohla ověřit volání do něj. Je tu není žádný skvělý způsob, jak se rozšiřuje postaven v typy jako windowv současné době tedy, že je třeba dělat věci, jako je (<any>window).webkitRequestAnimationFrame. Jako obecné pravidlo platí v případě, že kompilátor stěžuje, a víte, že je platný JavaScript můžete vždy cast se <any>, aby to fungovalo.

var requestAnimFrame: (callback: () => void) => void = (function(){ 
  return window.requestAnimationFrame || 
  (<any>window).webkitRequestAnimationFrame || 
  (<any>window).mozRequestAnimationFrame || 
  (<any>window).oRequestAnimationFrame || 
  window.msRequestAnimationFrame || 
  function(callback){ 
      window.setTimeout(callback, 1000 / 60, new Date().getTime()); 
  }; 
})(); 
Odpovězeno 04/10/2012 v 17:12
zdroj uživatelem

hlasů
0

Důvodem dodávané parametry neodpovídají podpisu cíle volání je to, že jste volání funkce, jako je tento:

(function(callback) { ... })();

To znamená, že funkce přijímá callback, ale nejste absolvování jednoho v.

Ty by měly odstranit callbackjako parametr, protože jste ji nepoužíváte nikde ve funkci.

Odpovězeno 04/10/2012 v 12:34
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more