जावास्क्रिप्ट 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