4

私は現在、このコードを TypeScript に移植しようとして立ち往生しています。

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
}
4

2 に答える 2

3

コードをコンパイルするために私がしたことは次のとおりです。requestAnimFrame()TypeScript がその呼び出しを検証できるように、グローバルとして定義して入力しました。現在のように組み込み型を拡張する優れた方法はない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()); 
  }; 
})(); 
于 2012-10-04T16:12:40.387 に答える
0

指定されたパラメーターが call target の署名と一致しない理由は、次のような関数を呼び出しているためです。

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

つまり、関数は受け入れcallbackますが、渡していません。

callback関数のどこにも使用していないため、パラメーターとして削除する必要があります。

于 2012-10-04T11:34:14.490 に答える