2012-10-03 1 views
13

Ich verwende Personas, die auf der proprietary property navigator.id beruht. Da diese Eigenschaft nicht Standard ist, erzeugt die Typoskript Compiler die folgende Warnung:Umgang mit Warnungen für proprietäre/benutzerdefinierte Eigenschaften von integrierten Objekten in TypeScript

$ 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' 

Aber die JS-Datei erfolgreich erzeugt und läuft auf dem FF15-Browser ohne Warnung/Fehlermeldung.
Ich schließe auch eine Polyfill für navigator.id, wie in der Dokumentation angewiesen, so navigator.id wird definitiv in jedem Browser verfügbar.

Kann mir jemand vorschlagen, wie ich mit dieser Warnung umgehen soll?

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

Was ist 'navigator'? Woher kommt es? Wie wird es erklärt? –

+0

@Sidharth: https://developer.mozilla.org/en-US/docs/DOM/window.navigator –

+1

Vielleicht relevant: https://developer.mozilla.org/en-US/docs/DOM/navigator.id ... es ist eine Nicht-Standard-Immobilie. –

Antwort

18

1) Sie neu interpretieren kann Navigationsstütze

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

2) können Sie erklären ID prop youself

mycompany.lib.d.ts

interface Navigator { 
    id: any 
} 

app.ts

navigator.id.request(); 

sehen Dieses Video http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript/ Es Anders Erzähle als jQuery.UI füge neue Methoden zu jQuery hinzu (siehe 46 min)

+0

Ich ging mit Option 2, da es wie der "Typescript Way" scheint und hilft technische Schulden zu minimieren. – rinogo

0

Kontrollen hinzufügen wie if(navigator.id != null && typeof navigator.id != 'undefined') vor Anw wo navigator.id wird

bezeichnet
+1

Dies schützt zur Laufzeit gegen undefinierte ID, aber der Compiler wird immer noch beschweren, dass es die Schnittstelle bricht. @ Jack128's Antwort ist gut - fügen Sie die Schnittstellendefinition hinzu. Besser noch, schreiben Sie einen Deklarationsheader für die tatsächliche Schnittstelle, anstatt nur 'navigator.id: any' zu sagen. –

Verwandte Themen