2016-05-16 20 views
2

Wie diese Objekte mit Anmerkungen versehen werden, damit ich Compiler-Fehler oder eine Warnung bekomme, wenn ich auf nicht vorhandene Eigenschaften zugreifen möchte?Wie sicher auf Objekteigenschaft mit Speicherplatz (JSONP-Eigenschaft wie "Vorname": "...") zugreifen

{ 
    "Id": 1 
    "First Name": "Lorem", 
    "Last Name": "Ipsum", 
} 

Ich habe diese Aufgabe mit dieser Definition kommentierte:

interface Person{ 
    Id: number; 
    "First Name": string; 
    "Last Name": string; 
} 

aber ich bin in der Lage immer noch nicht sicher, die „Vorname“ Eigenschaft zuzugreifen, da die einzige Möglichkeit für den Zugriff ist :

var person : Person = ...; 
var firstName = person["First Name"]; 

nicht nur, dass diese zurücküberhaupt, aber es erlaubt nicht definierte Eigenschaften zugreifen zu können, wie person['bla bla'] ohne Compiler-Fehler.

Antwort

-1

Haben Sie uns Indizes wie "First Name"?
Denn das ist, was die Probleme verursacht, sollten Sie diesen Code:

interface Person { 
    Id: number; 
    FirstName: string; 
    LastName: string; 
} 

var person : Person = { Id: 3, FirstName: "fname", LastName: "lname" }; 
var firstName = person.FirstName; 
var illegal = person.nothing; // error 
var legal = person["nothing"]; // ok 

(playground)

Wenn ich person.nothing versuchen dann beschwert, dass die Schnittstelle Person diese Eigenschaft nicht haben, aber wenn ich versuche person["nothing"] es beschwert sich nicht.

+0

Ja, ich muss dieses Format verwenden, da ich die Daten nicht besitze. Wenn ich das Objekt wie mich mit Anführungszeichen annotiere, validiert Typoskript Zuweisungen wie 'var person: Person = {...}' – Liero

+0

Ja, diese Art der Zuweisung überprüft die Eigenschaften, wie bei der Punktnotation ('person.FirstName '). Mir ist nicht bewusst, wie der Compiler den Eigenschaftsnamen validiert, wenn Sie ihn als Index verwenden ('person [" First Name "]'), aber vielleicht weiß hier jemand anders wie. –