Porting JavaScript requestAnimFrame al dattiloscritto

voti
4

Attualmente sto bloccato cercando di questo codice in dattiloscritto.

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'errore che ottengo è TSC:

parametri forniti non corrispondono ogni firma del target chiamata

Ho provato a dichiarare un interface WindowEx extends Windowcontenente le firme, poi colata a (< WindowEx>window).xxx, ma dubito che questo è il modo corretto per convertire il codice tipico.

Un tentativo:

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
}
È pubblicato 04/10/2012 alle 10:43
fonte dall'utente
In altre lingue...                            


2 risposte

voti
2

Ecco quello che ho fatto per ottenere il codice per compilare. Ho appena definito requestAnimFrame()come un globale e digitato in modo che dattiloscritto potrebbe convalidare le chiamate verso di esso. Non c'è alcun modo fantastico di estendere costruito in tipi come windowattualmente qui la necessità di fare le cose come (<any>window).webkitRequestAnimationFrame. Come regola generale, se il compilatore si lamenta e si sa che è valida JavaScript si può sempre lanciare per <any>per farlo funzionare.

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()); 
  }; 
})(); 
Risposto il 04/10/2012 a 17:12
fonte dall'utente

voti
0

La ragione per cui i parametri forniti non corrispondono alla firma del target chiamata è perché si sta chiamando una funzione come questa:

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

Cioè, la funzione accetta callbackma non si passa uno in.

È necessario rimuovere callbackcome parametro perché non lo si utilizza in qualsiasi punto della funzione.

Risposto il 04/10/2012 a 12:34
fonte dall'utente

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