Portar JavaScript requestAnimFrame a mecanografiado

votos
4

Actualmente estoy atascado tratando de puerto de este código para mecanografiado.

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

El error que consigo es cac:

Parámetros proporcionados no coinciden con ninguna firma de llamada objetivo

He intentado declarar una interface WindowEx extends Windowque contiene las firmas, a continuación, la fundición hasta (< WindowEx>window).xxx, pero dudo que esta es la forma correcta para convertir el código típico.

Un intento:

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
}
Publicado el 04/10/2012 a las 10:43
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
2

Esto es lo que hice para conseguir su código para compilar. Me acaba de definir requestAnimFrame()como un mundial y escribí para que mecanografiado podía validar las llamadas a la misma. No hay ningún gran manera de extender construida en tipos como windowactualmente de ahí la necesidad de hacer cosas como (<any>window).webkitRequestAnimationFrame. Como regla general, si el compilador se queja y usted sabe que es válida JavaScript siempre se puede echar a <any>hacer que funcione.

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()); 
  }; 
})(); 
Respondida el 04/10/2012 a las 17:12
fuente por usuario

votos
0

La razón de los parámetros proporcionados no coinciden con la firma de llamada objetivo se debe a que está llamando una función como esta:

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

Es decir, la función acepta callbackpero no está pasando uno de cada.

Debe eliminar callbackcomo un parámetro, ya que no lo está utilizando en cualquier lugar de la función.

Respondida el 04/10/2012 a las 12:34
fuente por usuario

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