为了在地图上显示一条线,我从REST服务获得了许多带坐标的数据:
{
"name": "line1"
"route": [["2015-03-26T23:29:57",-0.9,-81.8],["2015-03-26T23:34:58",-0.9,-81.8],["2015-03-26T23:39:59",-0.8,-81.8],...]
}
由于JSON中有很多数据,我使用的是一个数组(带有Timestamp,Latitude,Longitude),而不是一个对象,因为那时我的响应大小会增加一倍(因为重复了属性名称)。 / p>
我有一个界面:
export interface ILine {
name: string
route: IWaypoint[]
}
现在我想致电:
public handleResponse(line: ILine) {
for (var i in line.route) {
var waypoint = line.route[i];
var timestamp: string = waypoint.timestamp;
var lat: number = waypoint.latitude;
var lon: number = waypoint.longitude;
}
}
但这可能吗?我该如何实现IWaypoint接口?
这适用于类型安全,但我仍然无法使用属性名称:
export interface IWaypoint extends Array<Date | number> {
0: Date
1: number
2: number
}
我仍然需要记住纬度位于第1位。
对索引使用'常量'(var或enum)时,Typescript无法确定类型。
const wpLatitude = 1;
var lat: number = waypoint[wpLatitude]; // <- error: Argument of type 'number | Date' is not assignable to parameter of type 'number'
enum WaypointIndex {
TIMESTAMP,
LATITUDE,
LONGITUDE
}
var lat: number = waypoint[WaypointIndex.LATITUDE]; // <- error
答案 0 :(得分:1)
TypeScript在大多数情况下都不会尝试modify ouput JS,因此如果您想访问数组上的命名字段,最好将其转换为对象:
var route = line.route.map((wp) =>
{
return { timestamp: wp[0], latitude: wp[1], longitude: wp[2] };
});