La propriété 'json' n'existe pas sur le type" {}'
J'ai une classe de base abstraite à la Machine, qui ressemble à ceci:
import {Http, Headers, Response} from 'angular2/http';
export abstract class SomeService {
constructor(private http:Http) {}
protected post(path:string, data:Object) {
let stringifiedData = JSON.stringify(data);
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
this.http.post(`http://api.example.com/${path}`, stringifiedData, { headers })
.map(res => res.json())
.subscribe(obj => console.log(obj));
}
}
Il fonctionne parfaitement. Cependant, le Tapuscrit compilateur se plaint .map(res => res.json())
. Je reçois cette erreur:
ERROR in ./src/app/components/shared/something/some.abstract.service.ts
(13,29): error TS2339: Property 'json' does not exist on type '{}'.
J'ai suivi les exemples de l'angle de 2 documentation, et il fonctionne. Je suis juste malade de regarder cette erreur. Ai-je raté quelque chose?
Il me semble que la réponse que vous obtenez est déjà données json, de sorte que le json() l'appel est superflu. Et qui aurait du sens, puisque vous spécifier l'en-tête accept, où l'exemple de lien qui ne fonctionne pas.
ah - duh. Vous avez probablement raison, je peux probablement tomber cette ligne tout à fait. Mais... le compilateur ne le sais pas, droite? Ne devrait pas Tapuscrit encore me permettre de le faire - parce qu'il ne sait pas ce que le retour de données va ressembler?
Franchement, j'ai raté le tapuscrit de la balise de moi-même, je sais à peu près rien à ce sujet 🙂
Utilisation
ah - duh. Vous avez probablement raison, je peux probablement tomber cette ligne tout à fait. Mais... le compilateur ne le sais pas, droite? Ne devrait pas Tapuscrit encore me permettre de le faire - parce qu'il ne sait pas ce que le retour de données va ressembler?
Franchement, j'ai raté le tapuscrit de la balise de moi-même, je sais à peu près rien à ce sujet 🙂
Utilisation
.map((res: Response) => res.json())
OriginalL'auteur drewwyatt | 2015-11-25
Vous devez vous connecter pour publier un commentaire.
Ce me semble étrange...
Je ne
maintenant, depuis la
Response
classe est obsolète, de sorte que pouvez-vous s'il vous plaît écrire cette réponse est-elle dans le contexte deHttpResponse
classe. Simple remplacement ne fonctionne pas, donc s'il vous plaît!"Réponse" n'est qu'une interface. vous pouvez créer votre propre "MyCustomThing" de l'interface et de l'utiliser.. vous souhaitez encore utiliser de la même façon. Mais gardez à l'esprit que l' .json() n'est pas nécessaire si vous utilisez la plus récente "HttpClient" au lieu de "Http"
OriginalL'auteur Mackelito
Vous pouvez vous débarrasser de cette erreur par type d'affirmation de
Response
:http.post()
sera de retour d'uneObservable<Response>
sur quimap
nécessitera un Objet de typeResponse
. Je pense que c'est un manque de définition dans le courant de la Machine AngularJS.d.ts
.Tapuscrit pense
res
est de type Objet vide. Ce type devrait-il être?Un observables - il est mentionné dans les ici
Si c'est
Response
vous pourriez vouloir jeter aux<Response>
istead de<any>
. Le problème, c'est que la Machine ne peut pas automatiquement supposer res estResponse
parce que le contexte dansmap
n'est pas assez précispréférez
as
syntaxe de l'affirmation ... aussi ne pas l'appeler casting basarat.gitbooks.io/tapuscrit/content/docs/types de/.... Néanmoins, +1OriginalL'auteur CoderPi