Используйте интерфейс для отображения ответа вложенного массива из http-запроса

У меня есть данные ответа от API, которые я отправляю как json.send({сообщение: 'успех', маршруты: 'полет'})

Затем я выполняю свой запрос на получение в Angular, чтобы получить ответ. Ответ выглядит так

[  
    {  
       "AirItinerary":{  
          "OriginDestinationOptions":{  
             "OriginDestinationOption":[  
                {  
                   "FlightSegment":[  
                      {  
                         "DepartureAirport":{  
                            "LocationCode":"JFK"
                         },
                         "ArrivalAirport":{  
                            "LocationCode":"LAX"
                         },
                         "MarketingAirline":{  
                            "Code":"AS"
                         },
                         "ArrivalTimeZone":{  
                            "GMTOffset":-7
                         },
                         "TPA_Extensions":{  
                            "eTicket":{  
                               "Ind":true
                            }
                         },
                         "StopQuantity":0,
                         "ElapsedTime":375,
                         "ResBookDesigCode":"R",
                         "MarriageGrp":"O",
                         "Equipment":{  
                            "AirEquipType":"32S"
                         },
                         "DepartureDateTime":"2018-10-07T16:55:00",
                         "ArrivalDateTime":"2018-10-07T20:10:00",
                         "FlightNumber":1413,
                         "OnTimePerformance":{  
                            "Percentage":"NNN"
                         },
                         "OperatingAirline":{  
                            "FlightNumber":1413,
                            "Code":"AS"
                         },
                         "DepartureTimeZone":{  
                            "GMTOffset":-4
                         }
                      }
                   ],
                   "ElapsedTime":375
                },
                {  
                   "FlightSegment":[  
                      {  
                         "DepartureAirport":{  
                            "LocationCode":"LAX"
                         },
                         "ArrivalAirport":{  
                            "LocationCode":"JFK"
                         },
                         "MarketingAirline":{  
                            "Code":"AS"
                         },
                         "ArrivalTimeZone":{  
                            "GMTOffset":-4
                         },
                         "TPA_Extensions":{  
                            "eTicket":{  
                               "Ind":true
                            }
                         },
                         "StopQuantity":0,
                         "ElapsedTime":315,
                         "ResBookDesigCode":"R",
                         "MarriageGrp":"O",
                         "Equipment":{  
                            "AirEquipType":"32S"
                         },
                         "DepartureDateTime":"2018-10-20T07:35:00",
                         "ArrivalDateTime":"2018-10-20T15:50:00",
                         "FlightNumber":1404,
                         "OnTimePerformance":{  
                            "Percentage":"NNN"
                         },
                         "OperatingAirline":{  
                            "FlightNumber":1404,
                            "Code":"AS"
                         },
                         "DepartureTimeZone":{  
                            "GMTOffset":-7
                         }
                      }
                   ],
                   "ElapsedTime":315
                }
             ]
          },
          "DirectionInd":"Return"
       },
       "TPA_Extensions":{  
          "ValidatingCarrier":{  
             "Code":"AS"
          }
       },
       "SequenceNumber":1,
       "AirItineraryPricingInfo":{  
          "PTC_FareBreakdowns":{  
             "PTC_FareBreakdown":{  
                "FareBasisCodes":{  
                   "FareBasisCode":[  
                      {  
                         "BookingCode":"R",
                         "DepartureAirportCode":"JFK",
                         "AvailabilityBreak":true,
                         "ArrivalAirportCode":"LAX",
                         "content":"R21N6"
                      },
                      {  
                         "BookingCode":"R",
                         "DepartureAirportCode":"LAX",
                         "AvailabilityBreak":true,
                         "ArrivalAirportCode":"JFK",
                         "content":"R21XN6"
                      }
                   ]
                },

Я получаю свой объект через подписку, а затем преобразовываю его и отправляю в свой компонент в качестве наблюдаемого. Как я могу сопоставить ответ, если это объект? Я могу получить порядковый номер, потому что он имеет номер типа в моем интерфейсе. Я пытался использовать второй интерфейс, но получаю ошибку типа.

import { Itinerary, AirItineraryList } from "./../models/Itinerary";
import { Subject } from "rxjs";
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";

import { map } from "rxjs/operators";

@Injectable({
  providedIn: "root"
})
export class InstantSearchService {
  Itineraries: Itinerary[] = [];
  private updatedItineraries = new Subject<Itinerary[]>();

  constructor(private http: HttpClient) {}

  getItineraries() {
    console.log('getting')
    this.http
      .get<{ message: string; Itineraries: Itinerary[] }>(
        "http://localhost:3000/cities/instant"
      )
      .pipe(
        map(ItineraryData => {
          return ItineraryData.Itineraries.map(flight => {
            return {
              AirItinerary: flight.AirItinerary,
              SequenceNumber: flight.SequenceNumber
            };
          });
        })
      )
      .subscribe(transIten => {
        this.Itineraries = transIten;
        this.updatedItineraries.next([...this.Itineraries]);
      });
  }

  getItineraryUpdateListener() {
    return this.updatedItineraries.asObservable();
  }
}

интерфейс

export interface Itinerary {
  AirItinerary:AirItineraryList[];
  SequenceNumber: Number;

}
export interface AirItineraryList {
  OriginDestinationOptions: Object;
  DirectionInd: string;
}


person Pari Baker    schedule 09.08.2018    source источник


Ответы (1)


В итоге я использовал несколько интерфейсов, которые привели к моему исходному интерфейсу маршрута и сопоставили его со значениями в объекте.

person Pari Baker    schedule 18.08.2018