2012-10-04 2 views
4

이 코드를 TypeScript로 이식하려는 중입니다.JavaScript requestAnimFrame을 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 
} 

답변

0

이 같은 함수를 호출하고 있기 때문에 제공된 매개 변수가 호출 대상의 서명이 일치하지 않는 이유는 다음과 같습니다

입니다
(function(callback) { ... })(); 

의 함수는 callback을 수락하지만 하나는 전달하지 않습니다.

callback을 매개 변수로 제거해야합니다. 아무데도 사용하지 않기 때문입니다. 함수에서.

2

다음은 내가 코드를 컴파일하도록 한 것입니다. 방금 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()); 
    }; 
})();