输入'Observable&lt; {}&gt;'不能分配给'Observable <token>'

时间:2016-10-17 11:59:13

标签: angular

我是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));

    }
  }
}

我想知道这个错误背后的原因以及解决方案。提前谢谢!

1 个答案:

答案 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())