2016-05-16 14 views
2

このオブジェクトに注釈を付けると、存在しないプロパティにアクセスしようとするとコンパイラエラーまたは警告が表示されます。スペースでオブジェクトプロパティに安全にアクセスする方法( "First Name"のようなJSONPプロパティ: "...")

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

私は、この定義を使用して、このオブジェクトを注釈を付けました。それにアクセスするための唯一の方法であるため

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

は、しかし、私は、まだ安全に「名」プロパティにアクセスすることはできませんよ:コンパイラエラーなしperson['bla bla']のように、これはいずれかを返しますが、それは未定義のプロパティにアクセスすることを可能にすることを

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

ないだけ。

答えて

-1

"First Name"のようなインデックスをお持ちですか?
それが問題を引き起こすものだ、このコードを検討していますので:私はその後、person.nothingをしようとすると

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このプロパティを持っていないと文句を言いますが、私はperson["nothing"]をしようとすると、それは文句なしです。

+0

はい、私はデータを所有していないので、その形式を使用する必要があります。 'var person:Person = {...} 'のような代入を検証します。 – Liero

+0

はい、この種の代入は、ドット表記(' person.FirstName ')。私はあなたがインデックス( 'person [" First Name "]')としてそれを使用するときコンパイラがプロパティ名を検証する方法を知らないが、他の誰かがここでどのように知っているか知っている。 –