2016-05-16 36 views
2

如何註釋此對象,以便在嘗試訪問不存在的屬性時收到編譯器錯誤或警告?如何使用空格安全地訪問對象屬性(JSONP屬性,如「First Name」:「...」)

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

我已經使用這個定義註釋此對象:

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

,我還是不能夠安全地訪問「名」的性質,因爲訪問的唯一方法是:

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

不僅這個返回的任何,但它允許訪問未定義的屬性,如person['bla bla']沒有編譯器錯誤。

回答

-1

你有我們這樣的索引"First Name"
因爲那是什麼引起的問題,考慮下面的代碼:

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

當我嘗試person.nothing則抱怨說,該接口Person沒有這個屬性,但是當我嘗試person["nothing"]它不會抱怨。

+0

是的,我必須使用這種格式,因爲我沒有擁有數據。當我註釋象我這樣的對象時,用引號,typescript驗證賦值如'var person:Person = {...}' – Liero

+0

是的,這種賦值檢查屬性,就像使用點符號('person.FirstName ')。我不知道如何使用它作爲索引('person [「First Name」]')來使編譯器驗證屬性名稱,但也許其他人知道如何。 –