2016-10-17 2 views
0

Im совершенно новым для углового 2. Im получения этой ошибки 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

Это просто машинописный документ, дающий вам знать, что вы не назначали типы, где вам следует.

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

Спасибо за г Эплы. Я сделал это на вашем пути. теперь ошибка происходит от 'catch'. – Isuru

+0

'propert 'catch' не существует в типе« Token'' PLS, помогите мне и с этим. – Isuru

+0

Попробуйте переместить улов перед картой. – Sasxa

Смежные вопросы