JavaScript requestAnimFrame Portieren Typoskript

stimmen
4

Ich bin derzeit diesen Code in dem Hafen Typoskript stecken versuchen.

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

Der tsc Fehler ich erhalte, ist:

gelieferten Parameter keine Unterschrift des Anrufziel entsprechen

Ich habe versucht zu erklären eine interface WindowEx extends Windowdie Signaturen enthält, dann Gießen (< WindowEx>window).xxx, aber ich bezweifle , dass dies der richtige Weg ist , um diesen „typischen“ Code zu konvertieren.

Ein Versuch:

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
}
Veröffentlicht am 04/10/2012 um 10:43
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Hier ist , was ich tat , um Ihren Code zu kompilieren. I definierte nur requestAnimFrame()als globales und tippte es so , dass Typoskript Anrufe es bestätigen kann. Es gibt keine gute Möglichkeit , von wie in Typen gebaut erstreckt windowderzeit daher die Notwendigkeit , Dinge zu tun , wie (<any>window).webkitRequestAnimationFrame. Als allgemeine Regel gilt , wenn der Compiler beschwert sich, und Sie wissen , dass es gültig JavaScript ist man immer zu werfen kann , <any>damit es funktioniert.

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()); 
  }; 
})(); 
Beantwortet am 04/10/2012 um 17:12
quelle vom benutzer

stimmen
0

Der Grund, die gelieferten Parameter ist nicht die Unterschrift des Anrufziel übereinstimmen, weil Sie eine Funktion wie folgt aufrufen:

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

Das heißt, übernimmt die Funktion , callbackaber sie sind nicht vorbei eine in.

Sie sollten entfernen callbackals Parameter , weil Sie es nicht überall in der Funktion.

Beantwortet am 04/10/2012 um 12:34
quelle vom benutzer

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