short:有一个返回http调用的方法(get,put,不管怎样),使用类型记录类型确定返回的项目的类型?
在TypeScrpt级别上,许诺是一种泛型类型。它继承您所期望的消息的类型,例如IPromise<T>。通过这种方式,您可以定义一个方法返回一个类型为Promise<number[]>的承诺,它基本上返回一个使用数字列表解析的承诺。多亏了这一点,你才能使打字稿更加强大。
您也可以对可观察性(RxJS)做同样的操作。简单地说,我们有Observable<T> (只需看看npm:rxjs中的Observable.d.ts )。您在这个流中所期望的每一项都是T类型的(这是subscribe回调参数-必须是- TypeScript为您检查这个参数)。
角度
回到角度,HTTP模块封装可观察到的内容。它不会立即返回值,但是会发出带有http相关内容(状态、状态文本、url等)的HTTP调用,而不仅仅是值。在HTTP的.d.ts、http.get、put、post等中,返回Observable<Response>,其中Response是HTTP调用的角度内置包装器。但是我发现我失去了预先定义HTTP应该返回的类型的可能性。
问题是:角http调用是否有可能预先定义http-调用/可观测返回的类型?类似于Observable<User>,User只是我的应用程序接口。
发布于 2017-05-24 14:25:08
我想你是在找这样的东西:
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/of';
get(id: number): Observable<User> {
    const url = `${this.baseUrl}/${id}`;
    return this.http
               .get(url)
               .do((response: Response) => {
                 if (!response) {
                   return Observable.of(null);
                 }
               })
               .map((response: Response) => {
                   return <User>response.json();
               })
               .catch(error => {
                 return Observable.of(null);
               });
}发布于 2017-05-24 14:38:25
也许这能帮到某人..。
@Injectable()
export class UsersModel {
  getItem(id: number): Observable<User> {
    return this.http.get(`${API_URL}/users/${id}`, {
      headers: this.getHeaders()
    });
  }
}在上面的代码中,引发的错误是Observable<Response>与不同的数据类型Observable<User>冲突。解决方案只是将observable.map((res) => res.json())包含到DAO方法中,如下所示:
@Injectable()
export class UsersModel {
  getItem(id: number): Observable<User> {
    return this.http.get(`${API_URL}/users/${id}`, {
      headers: this.getHeaders()
    })
    .map((res) => res.json());
  }
}现在没有冲突,因为res.json (类响应)返回any。这为我们打开了使getItem方法返回我们的某些类型的可能性:getItem(id: number): Observable<User>。我已经得到了我所需要的--在DAO之外--在一个组件中,例如,我需要:
this.UsersModel.getItem().subscribe(u => {
  u // u is of User already, yay!
})https://stackoverflow.com/questions/44161007
复制相似问题