2015-06-12 2 views
1

Для показывая линию на карте, я получаю много данных с координатами от службы REST:Могу ли я поместить интерфейс объекта в массив в TypScript?

{ 
    "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, широта, долгота), а объект, потому что тогда я бы удвоил размер ответа (из-за повторения имен свойств).

У меня есть интерфейс:

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) для индекса, TypScript не может определить тип.

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 

ответ

1

машинопись старается не modify ouput JS большую часть времени, поэтому, если вы хотите получить доступ к именованных полей на массив, лучше всего, чтобы преобразовать его в объект:

var route = line.route.map((wp) => 
{ 
    return { timestamp: wp[0], latitude: wp[1], longitude: wp[2] }; 
}); 
Смежные вопросы