7

Google からwebgl-utils.jsの d.ts ファイルを作成しています

グローバルオブジェクトのメソッドが「モンキーパッチ」されている最後の行の1つに問題があります(これは正しい用語だと思います)

問題の行は次のとおりです。

 /**
  * Provides requestAnimationFrame in a cross browser way.
  */
 window.requestAnimFrame = (function() {
   return window.requestAnimationFrame ||
          window.webkitRequestAnimationFrame ||
          window.mozRequestAnimationFrame ||
          window.oRequestAnimationFrame ||
          window.msRequestAnimationFrame ||
          function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
            window.setTimeout(callback, 1000/60);
          };
 })();

関数を使用するときにコンパイル エラーが発生しないように、typescript ファイルでこれを宣言するにはどうすればよいですか。

 function tick()
 {
      requestAnimFrame(tick);
      drawScene();
 }

私は今試しました:

 interface window
 {
      requestAnimFrame(): any;
 }

しかし、これはエラーを削除しません:

 The name 'requestAnimFrame' does not exist in the current scope
4

4 に答える 4

7

正しい方向に向かっていましたが、すべてのバリエーションを定義する必要があります。

 interface Window {
     requestAnimFrame(callback: any, element?: any): void;
     webkitRequestAnimationFrame(callback: any, element?: any): void;
     mozRequestAnimationFrame(callback: any, element?: any): void;
     oRequestAnimationFrame(callback: any, element?: any): void;
 }

 window.requestAnimFrame = (function() {
    return window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        window.msRequestAnimationFrame ||
        function(callback, element?) {
            window.setTimeout(callback, 1000/60);
        };
 })();

function tick() {
    window.requestAnimFrame(tick);
}
于 2013-02-06T09:48:21.370 に答える
3

インターフェイス名が「w」ではなく大文字の「W」で始まることを確認してください

interface Window {
   requestAnimFrame():any;
}

呼び出し元のコードでは、を使用しますwindow.requestAnimFrame();。これがあなたの問題を解決することを願っています

于 2013-02-06T04:21:01.907 に答える
0

私のために働いた唯一の方法:

declare global {
    interface Window {
        requestAnimFrame(callback: () => void): any;
        webkitRequestAnimationFrame(callback: () => void): any;
        mozRequestAnimationFrame(callback: () => void): any;
        oRequestAnimationFrame(callback: () => void): any;
    }
}

Window.prototype.requestAnimFrame = function () {
    return window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        function (callback) {
            window.setTimeout(callback, 1000 / 60);
        };
}
于 2017-09-07T20:10:21.150 に答える