如何对这些对象进行注释,以便在尝试访问不存在的属性时出现编译器错误或警告?
{
"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']
,而不会出现编译器错误。
答案 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
当我尝试person.nothing
时,它会抱怨界面Person
没有此属性,但当我尝试person["nothing"]
时,它不会抱怨。