2017-10-13 7 views
0

Je la pièce de code suivanteTapuscrit: IntelliSense ne reconnaît pas le type retourné par une méthode utilisant http.post

getLoggingCsvRecords(recId: string) { 
    const url = this.apiurl + 'loggingcsvrecordsforrecid'; 
    return this.http.post<Array<string>>(url, {recId}) 
         .map(data => data['results']); 
    } 

Je me attends à IntelliSense de reconnaître que le type retourné par la méthode getLoggingCsvRecords() est Obsevable<Array<string>> . Au contraire, intellisense suggère Observable<any> comme le bon type. Où est-ce que je me trompe? J'utilise VSCode comme IDE.

Répondre

2

Votre signature de retour au mauvais endroit.

GetLoggingRecords(recId: string): Observable<Array<string>> { 
    Your code 

    return this.http.post(rest of stuff) 
} 
+0

Je lis quelque part la possibilité d'écrire 'http.post ()', mais probablement je ne comprenais pas le sens réel – Picci

+0

C'est probablement pour la coulée que vous voulez éviter –

-1

D'après ce que vous avez écrit, le message HTTP renvoie un tableau de chaînes. Cependant, vous semblez faire correspondre cela comme un objet.

Peut-être vouliez-vous dire quelque chose comme ça?

interface ILoggingRecord { 
    results: string; 
} 

// ... 

getLoggingCsvRecords(recId: string) { 
    const url = this.apiurl + 'loggingcsvrecordsforrecid'; 
    return this.http.post<Array<ILoggingRecord>>(url, {recId}) 
     .map(data => data['results']); 
} 

L'appel doit pouvoir comprendre que les données sont un tableau d'objets. Le résultat de la carte est donc une chaîne. Si cela ne fonctionne pas, essayez plutôt data => data.results. L'accès par chaîne aux propriétés peut perturber l'analyseur de syntaxe.

+0

ne fonctionne pas comme cela est encore Observable

+0

Puissance vaut la peine de vérifier la documentation officielle car il est difficile de dire le type de retour exact. https://angular.io/guide/http#typechecking-the-response Mais en résumé "Vous pouvez, cependant, dire à HttpClient de quel type sera la réponse, ce qui est recommandé" comme ci-dessus. –