如何安全地使用空间访问对象属性(JSONP属性如"名字":" ...")

时间:2016-05-16 11:21:56

标签: typescript jsdoc

如何对这些对象进行注释,以便在尝试访问不存在的属性时出现编译器错误或警告?

{
  "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"];

不仅会返回any,而且它允许访问未定义的属性,例如person['bla bla'],而不会出现编译器错误。

1 个答案:

答案 0 :(得分:-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"]时,它不会抱怨。