JavaScript requestAnimFrame pour le portage tapuscrit

voix
4

Je suis actuellement coincé en essayant de porter ce code tapuscrit.

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

L'erreur de tsc que je reçois est:

paramètres fournis ne correspondent à aucune signature de la cible d'appel

J'ai essayé de déclarer une interface WindowEx extends Windowcontenant les signatures, puis coulée à (< WindowEx>window).xxx, mais je doute que ce soit la bonne façon de convertir ce code « typique ».

Un essai:

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
}
Créé 04/10/2012 à 10:43
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
2

Voici ce que je l'ai fait pour obtenir votre code pour compiler. Je viens de définir requestAnimFrame()comme une approche globale et dactylographié de sorte que tapuscrit pu valider les appels à elle. Il n'y a pas une bonne façon d'étendre construit dans les types comme windowactuellement où la nécessité de faire des choses comme (<any>window).webkitRequestAnimationFrame. En règle générale , si le compilateur se plaint et vous le savez est JavaScript valide , vous pouvez toujours jeter à le <any>faire fonctionner.

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()); 
  }; 
})(); 
Créé 04/10/2012 à 17:12
source utilisateur

voix
0

La raison pour laquelle les paramètres fournis ne correspondent pas à la signature de la cible d'appel est parce que vous appelez une fonction comme ceci:

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

Autrement dit, la fonction accepte , callbackmais vous n'êtes pas passer un dans.

Vous devez supprimer en callbacktant que paramètre parce que vous ne l' utilisez pas partout dans la fonction.

Créé 04/10/2012 à 12:34
source utilisateur

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