Я пытаюсь вернуть массив определенного типа от моего провайдера в ионном приложении, используя ionic 3.20.0 (Angular 5.2.10 && typcript ~ 2.6.2)
В моем провайдере у меня есть это
export class vwOrderList {
OrderSheetId: number;
Pickup: DateTime;
Orders: number;
Items: number;
Total: number;
BilledAmt: number;
get Done(): boolean {
return this.Total == this.BilledAmt;
}
}
@Injectable()
export class OrderSheetsProvider {
getOrdersList() {
return new Promise<Array<vwOrderList>>(resolve => {
this.http.get('http://*****.elasticbeanstalk.com/odata/vwOrderLists').subscribe(data => {
resolve(<Array<vwOrderList>>data["value"]);
}, err => {
console.log(err);
});
});
}
}
Служба odata возвращает объект, в котором данные содержатся в свойстве "value"
, и выглядит следующим образом:
{
"@odata.context":"http://******.elasticbeanstalk.com/odata/$metadata#vwOrderLists","value":[
{
"OrderSheetId":1589,"Pickup":"2016-09-26T16:00:00Z","Orders":89,"Items":116,"Total":2349.54,"BilledAmt":2349.54
},{
"OrderSheetId":1921,"Pickup":"2016-12-14T10:00:00Z","Orders":142,"Items":204,"Total":3387.22,"BilledAmt":3387.22
},{ ... more
На странице, использующей эту информацию, у меня есть это:
export class OrderListPage {
dataSource: vwOrderList[];
constructor(public navCtrl: NavController, public navParams: NavParams, public ordersProvider: OrderSheetsProvider) {
this.getOrders();
}
getOrders() {
this.ordersProvider.getOrdersList()
.then(data => {
this.dataSource = data;
})
}
}
Сначала я попытался привести результат на страницу, которая использует возврат.Я пытался использовать разные вещи
// of course I didn't try these all at once, just one variation at a time
this.dataSource = data as vwOrderList[];
this.dataSource = data as Array<vwOrderList>;
this.dataSource = <Array<vwOrderList>>data;
Я не мог заставить их работать, поэтому вместо этого я изменил обещание, включив в него тип возврата Promise<Array<vwOrderList>>
.В любом случае это имеет больше смысла, потому что где бы я ни хотел использовать тип vwOrderList, это должен быть тот тип.Но, похоже, это тоже не сработает.
resolve(data["value"] as vwOrderList[]);
resolve(data["value"] as <Array<vwOrderList>>);
resolve(data["value"] as Array<vwOrderList>);
resolve(<Array<vwOrderList>>data["value"]);
resolve(Array<vwOrderList>data["value"]);
resolve(<Array<vwOrderList>>(data["value"]));
Данные поступают, но как массив объектов, а не как тип vwOrderList, конечно, не имеют геттера для «Готово»Метод.
Что мне делать, чтобы вернуть массив типа vwOrderList от моего провайдера?
TIA, Mike