2012-10-03 15 views
13

में अंतर्निहित वस्तुओं के स्वामित्व/कस्टम गुणों के लिए चेतावनियों को कैसे संभालें I Personus का उपयोग कर रहा हूं जो proprietary property navigator.id पर निर्भर करता है। के बाद से इस संपत्ति मानक नहीं है, टाइपप्रति संकलक निम्न चेतावनी उत्पन्न करता है:टाइपस्क्रिप्ट

$ tsc home.ts --out my_ts_generated_code.js 
/Users/..../home.ts(27,18): The property 'id' does not exist on value of type 'Navigator' 

लेकिन .js फ़ाइल सफलतापूर्वक उत्पन्न होता है और किसी भी चेतावनी/त्रुटि संदेश के बिना FF15 ब्राउज़र पर चलता है।
मैं प्रलेखन द्वारा निर्देशित अनुसार navigator.id के लिए पॉलीफिल भी शामिल करता हूं, इसलिए navigator.id निश्चित रूप से प्रत्येक ब्राउज़र में उपलब्ध होगा।

क्या कोई मुझे इस चेतावनी से निपटने का सुझाव दे सकता है?

index.html

<!-- some HTML omit above --> 
<script src="https://login.persona.org/include.js"></script> 
<script src="my_ts_generated_code.js"></script> 
<button class="btn" id="signin">Sign in</button> 
<button class="btn" id="signout">Sign out</button> 
<!-- some HTML omit below --> 

home.ts

declare var $; 

class Student { 
    fullname : string; 
    constructor(public firstname, public middleinitial, public lastname) { 
     this.fullname = firstname + " " + middleinitial + " " + lastname; 
    } 
} 

interface Person { 
    firstname: string; 
    lastname: string; 
} 

function greeter(person : Person) { 
    return "Hello, " + person.firstname + " " + person.lastname; 
} 

var user = new Student("Jane", "M.", "User"); 

$(function() { 
    $('#signin').on('click', function(e) { 
     e.preventDefault(); 
     navigator.id.request(); 
    }); 

    $('#signout').on('click', function(e) { 
     e.preventDefault(); 
     navigator.id.logout(); 
    }); 
    //document.body.innerHTML = greeter(user); 
}); 
+1

'नेविगेटर 'क्या है? यह कहां से आ रहा है? यह कैसे घोषित किया जाता है? –

+0

@ सिद्धार्थ: https://developer.mozilla.org/en-US/docs/DOM/window.navigator –

+1

शायद प्रासंगिक: https://developer.mozilla.org/en-US/docs/DOM/navigator.id ... यह एक गैर मानक संपत्ति है। –

उत्तर

18

1) में जाना जाता है stmt से पहले आप पुनर्व्याख्या कर सकते हैं नेविगेटर प्रोप।

(<any>navigator).id.request(); 

2) आप घोषणा कर सकते हैं आईडी अपने आप सहारा

mycompany.lib.d.ts

interface Navigator { 
    id: any 
} 

app.ts

navigator.id.request(); 

इस वीडियो को देखने के http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript/ वहाँ ऐन्डर्स jQuery के रूप में बताएं। यूआई jQuery में नई विधियां जोड़ें (46 मिनट देखें)

+0

मैं विकल्प 2 के साथ गया क्योंकि यह "टाइपस्क्रिप्ट वे" जैसा प्रतीत होता है और तकनीकी ऋण को कम करने में मदद करता है। – rinogo

0

if(navigator.id != null && typeof navigator.id != 'undefined') तरह की जांच करता है जहां navigator.id

+1

यह रनटाइम पर अपरिभाषित आईडी के खिलाफ सुरक्षा करेगा, लेकिन संकलक अभी भी शिकायत करेगा कि यह इंटरफ़ेस को तोड़ देता है। @ जैक 128 का जवाब अच्छा है - इंटरफ़ेस परिभाषा जोड़ें। बेहतर अभी भी, 'navigator.id: any' कहने के बजाय वास्तविक इंटरफ़ेस के लिए एक घोषणा शीर्षलेख लिखें। –

संबंधित मुद्दे