2017-12-07 1 views
2

ich eine Modellklasse pTyposkript typecasting eine Antwort auf eine Klasse

class P { 
    constructor(public ids: number[]) { 
     console.log(ids); 
    } 
} 

Dienst für api Aufruf ich Antwort bekam wie:

var response: any = { ids: "this is string" } 

Nun, wenn wir eine Instanz des Modells P schaffen mit ' ids Typ Mismatch: response‘

let p1 = new P(response.ids); 

dies sollte Fehler erzeugen

aber es gibt keinen Fehler.

Nun stellt sich die Frage, wie man die Antwort ablehnt, wenn sie dem gegebenen Modelltyp nicht entspricht?

+0

Wenn Sie Typ sicher sein wollen, können Sie die Antwortmodelle auf der Grundlage ihrer API-Spezifikationen erzeugen könnten (zB gibt es Tonnen von Prahlerei Generation Skripte/tools) das können Sie sicher sein, wenn Sie nicht den falschen Typ codieren –

Antwort

4

TypeScript kompiliert zu JavaScript. Wenn Sie während der Laufzeit die Service-API aufrufen, sind die Typen oder Typhinweisen nicht bekannt. Diese sind alle nur während des Kompilierungsschritts relevant.

Sie sollten manuell überprüfen, ob die API mit den richtigen Typen antwortet, entweder typeof oder instanceof, wenn Sie nach einem Objekt suchen. Im Fall, wenn ids ist ein Array von Zahlen, Sie können dies tun.

isArrayOfNumbers(array: any): boolean { 
    return Array.isArray(array) && array.every(value => typeof value === 'number'); 
} 
+0

Ich arbeite an einem eckigen4 Projekt und meine Dienste kommen wie unten zurück. > this.http.get ($ {this.endPoint.mock). map (_card => {Neue Karte zurückgeben (_card.purchaseId, _card.productName);}); Also, Ist das in Ordnung oder sollte ich eine explizite Typprüfung machen müssen? –

Verwandte Themen