Porten JavaScript requestAnimFrame om typoscript

stemmen
4

Ik ben momenteel vast wanneer ik probeer naar de haven deze code aan typoscript.

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

De TSC fout die ik krijg is:

bijgeleverde parameters niet overeenstemmen met een handtekening van de oproep doel

Ik heb geprobeerd te verklaren een interface WindowEx extends Windowmet de handtekeningen, dan gieten om (< WindowEx>window).xxx, maar ik betwijfel of dit de juiste manier om dit typische code te zetten.

Een poging:

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
}
De vraag is gesteld op 04/10/2012 om 10:43
bron van user
In andere talen...                            


2 antwoorden

stemmen
2

Hier is wat ik deed om uw code te compileren. Ik heb net gedefinieerd requestAnimFrame()als een wereldwijde en typte het zo dat Typescript oproepen om het te kunnen valideren. Er is geen goede manier zijn om ingebouwde types zoals windowmomenteel vandaar de noodzaak om dingen te doen zoals (<any>window).webkitRequestAnimationFrame. Als algemene regel geldt als de compiler klaagt en je weet dat het geldig is javascript kunt u altijd werpen om <any>te laten werken.

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()); 
  }; 
})(); 
antwoordde op 04/10/2012 om 17:12
bron van user

stemmen
0

De reden dat de opgegeven parameters niet de handtekening van de oproep doel overeenkomen is omdat je een functie als deze te bellen:

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

Dat wil zeggen, de functie accepteert callback, maar u bent niet daarbij één in.

Je moet verwijderen callbackals parameter, omdat je het nergens in de functie gebruikt.

antwoordde op 04/10/2012 om 12:34
bron van user

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