Porting JavaScript requestAnimFrame do maszynopis

głosy
4

Obecnie jestem zakleszczony próbuje portu ten kod do maszynopis.

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());
      };
  })();
}

Błąd TSC pojawia się:

Parametry Dostarczane nie znaleziono żadnych podpis celu wywołania

Próbowałem deklarowania interface WindowEx extends Windowzawierających podpisy, a następnie do rzucania (< WindowEx>window).xxx, ale wątpię, jest to poprawny sposób przekonwertować ten „typowy” kod.

Próba:

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
}
Utwórz 04/10/2012 o 10:43
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
2

Oto co zrobiłem, aby uzyskać kod do kompilacji. Ja po prostu zdefiniowane requestAnimFrame()jako globalny i wpisaniu go tak, że maszynopis mogłyby potwierdzić dzwonić do niego. Nie ma jakikolwiek doskonałym sposobem rozszerzenia zbudowany w rodzaju jak windowobecnie stąd potrzeba do zrobienia rzeczy, jak (<any>window).webkitRequestAnimationFrame. Zgodnie z ogólną zasadą, jeśli kompilator narzeka i wiesz, że to ważne JavaScript zawsze można rzucić się <any>, aby to działało.

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()); 
  }; 
})(); 
Odpowiedział 04/10/2012 o 17:12
źródło użytkownik

głosy
0

Powodem dostarczone parametry nie pasuje do podpisu celu wywołania jest, ponieważ jesteś wywołanie funkcji takich jak to:

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

Oznacza to, że funkcja przyjmuje callback, ale nie przechodzą jeden w.

Należy usunąć callbackjako parametr, ponieważ nie jest on używany w dowolnym miejscu funkcji.

Odpowiedział 04/10/2012 o 12:34
źródło użytkownik

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