2017-02-07 7 views
1

私はこのような活字体インターフェイスしたいと思います:活字体のインターフェイスに観察可能なタイプを追加

declare namespace UserService { 

    interface IUserService { 
     // Error: "Observable" can't be found 
     getUsers(): Observable<Array<UserService.IUser>>; 
    } 

    interface IUser { 
     Id: number; 
     FirstName: string; 
     LastName: string; 
    } 
} 

を...そして、問題はそのObservableあるこの

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map' 

@Injectable() 
export class UserService implements UserService.IUserService { 

    private usersUrl = 'http://localhost:12345/api/users'; 

    constructor(private http: Http) {} 

    public getUsers(): Observable<Array<UserService.IUser>> { 
     return this.http.get(this.usersUrl).map(response => response.json() as Array<UserService.IUser>); 
    } 
} 

のようにそれを使用しますIUserServiceのタイプが見つかりません。私が約束を使用してPromiseをタイプとして使用した場合、Promiseタイプが見つかりましたが、Observableを使用します。

私はこの間違いを考えている可能性があります。私は解決策または代替案を受け入れる。

interface IUser { 
    Id: number; 
    FirstName: string; 
    LastName: string; 
} 

とあなたのサービスであなたはそれが観測配列を返すことを指定します。

+0

あなたは{ 'インポートを持っていますObservable} from 'rxjs/Observable'; '宣言前の名前空間UserService {'? –

+0

@TuongLeこのようなインタフェースでのインポートは機能しません。 –

答えて

1

理由だけで、あなたのインタフェースを持っていない、ありがとうございました。

public getUsers(): Observable<IUser[]> { // will return Observable! 
    return this.http.get(this.usersUrl).map(response => response.json()); 
} 

これはIUserアレイの観測を返します:)

また、その後からimplementsを削除:だけに

export class UserService implements UserService.IUserService { 

export class UserService { 
+1

ええ、ええ。多分私の本来の意図を失ったようには見えないが、これは最高の答えだろう。なぜ私はそれをすることができなくてはならないのか分かりません。 –

関連する問題