我是Angular 2的新手。我得到了这个错误
Type 'Observable<{}>' is not assignable to type 'Observable<Token>'. Type {} is not assignable to type 'Token'. Property 'access_token' is missing in type {}.
服务
import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions, URLSearchParams } from '@angular/http';
import { Token } from './token';
import {Observable} from 'rxjs/Rx';
// Import RxJs required methods
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
@Injectable()
export class TokenService {
constructor(private http: Http) { }
getToken(): Observable<Token> {
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
var params = new URLSearchParams();
params.append('UserName', 'lasaluduwara@gmail.com');
params.append('Password', 'Lasal@123');
params.append('grant_type', 'password');
return this.http.post('https://payd.azurewebsites.net//token', params.toString(), { headers })
.map((res: Response) => res.json())
.catch((error: any) => Observable.throw(error));
}
}
}
我想知道这个错误背后的原因以及解决方案。提前谢谢!
答案 0 :(得分:2)
它只是打字稿,让你知道你没有指定你应该的类型。
getToken(): Observable<Token> {
return this.http.post(...)
.map((res: Response) => res.json())
}
此函数需要返回Observable
,因为http.post()
返回一个observable,它会执行此操作。它还希望这个observable发出Token
类型的东西,但它返回any
:
(res: Response): any => res.json()
由于http.post()
实际上并不知道您将从服务器获得什么,因此无法为您输入,您必须自己完成:
(res: Response): Token => res.json()
或创建Token
的新实例(如果TS仍然抱怨):
(res: Response): Token => new Token(res.json())