2016-10-17 76 views
0

林完全新的角度2.即時得到這個錯誤 Type 'Observable<{}>' is not assignable to type 'Observable<Token>'. Type {} is not assignable to type 'Token'. Property 'access_token' is missing in type {}.類型「可觀察<{}>」是不能分配給輸入「可觀察<Token>」

服務

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', '[email protected]'); 
    params.append('Password', '[email protected]'); 
    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)); 

    } 
    } 
} 

我想知道背後的原因這個錯誤和解決方案。提前致謝!

回答

2

這只是Typescript讓你知道你沒有分配類型,你應該。

getToken(): Observable<Token> { 
    return this.http.post(...) 
    .map((res: Response) => res.json()) 
} 

該功能預計將返回一個Observable它一定因爲http.post()返回一個可觀察的。該公司還預計,這種觀察到發射型Token的東西,但它返回any

  (res: Response): any => res.json() 

因爲http.post()實際上並不知道你會得到從服務器,它不能鍵入你,你必須做你自己:

  (res: Response): Token => res.json() 

或創建Token新實例(如TS仍然抱怨):

  (res: Response): Token => new Token(res.json()) 
+0

感謝對R eply。我以你的方式做到了。現在錯誤來自「catch」部分。 – Isuru

+0

''''''catch''不存在'Token'類型,請幫助我解決這個問題。 – Isuru

+0

嘗試在地圖前移動捕捉。 – Sasxa

相關問題