Портирование JavaScript requestAnimFrame в машинописном

голоса
4

В настоящее время я застрял, пытаясь перенести этот код на машинопись.

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

Ошибка TSC я получаю:

Прилагаемые параметры не соответствуют какой-либо подписи цели вызова

Я попытался объявляя interface WindowEx extends Windowс подписями, то приведение к (< WindowEx>window).xxx, но я сомневаюсь , что это правильный способ преобразовать это «типичный» код.

Попытка:

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
}
Задан 04/10/2012 в 10:43
источник пользователем
На других языках...                            


2 ответов

голоса
2

Вот что я сделал , чтобы получить код для компиляции. Я просто определяется requestAnimFrame()как глобальная и напечатал его так , что машинопись может проверить вызовы на него. Там не любой отличный способ расширения встроенных типов , как в windowнастоящее время , следовательно, потребность сделать что - то вроде (<any>window).webkitRequestAnimationFrame. Как правило , если компилятор жалуется , и вы знаете , что это действует JavaScript , вы всегда можете бросить на , <any>чтобы заставить его работать.

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()); 
  }; 
})(); 
Ответил 04/10/2012 в 17:12
источник пользователем

голоса
0

Причина подаваемых параметры не соответствуют подписи цели вызова, потому что вы вызываете функцию, как это:

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

То есть, функция принимает , callbackно вы не пропуская один в.

Вы должны удалить в callbackкачестве параметра , потому что вы не используете его в любом месте функции.

Ответил 04/10/2012 в 12:34
источник пользователем

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