将 Observable 类型添加到 TypeScript 接口

Aar*_*zar 3 typescript angular

我想制作一个这样的 TypeScript 界面:

declare namespace UserService {

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

    interface IUser {
        Id: number;
        FirstName: string;
        LastName: string;
    }
}
Run Code Online (Sandbox Code Playgroud)

...然后像这样使用它

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>);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是找不到中的Observable类型IUserService。如果我使用 Promises 并Promise用作Promise类型,则找到该类型,但我想使用Observable.

我可能在考虑这个错误。我会接受解决方案或替代方案。

谢谢

AJT*_*T82 6

为什么不只拥有你的界面:

interface IUser {
    Id: number;
    FirstName: string;
    LastName: string;
}
Run Code Online (Sandbox Code Playgroud)

并在您的服务中指定它将返回一个 Observable 数组。

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

这将返回一个 ObservableIUser数组 :)

然后implements从以下位置删除:

export class UserService implements UserService.IUserService {
Run Code Online (Sandbox Code Playgroud)

只是:

export class UserService  {
Run Code Online (Sandbox Code Playgroud)