在angular2打字稿方法中指定返回类型

时间:2016-05-07 09:02:07

标签: typescript angular ecmascript-6

我有一个数据访问方法,我在其中使用map来将哈希转换为数组,以便我可以在我的视图中迭代它们:

public getCrawlsStatuses():Observable<ICrawlsStatus[]> {

        let _statusesURL:string = `${this.API_URL}/crawl_statuses`;

        return this._http.get(_statusesURL)
            .map((res:Response) => {
                let statuses:ICrawlsStatus[] = [];
                Object.keys(res.json()).map(key => {
                    statuses.push({
                        name: key,
                        total: res.json()[key]
                    })
                });
                return statuses;
            })
            .catch(CrawlsService.onError);
    }

但是我发现变量状态有点多余,所以决定通过简单地利用observable的map方法的返回来缩短映射:

public getCrawlsStatuses():Observable<ICrawlsStatus[]> {

        let _statusesURL:string = `${this.API_URL}/crawl_statuses`;

        return this._http.get(_statusesURL)
            .map((res:Response) => {
                return Object.keys(res.json()).map(key => {
                    return {
                        name: key,
                        total: res.json()[key]
                    }
                });
            })
            .catch(CrawlsService.onError);
    }

这在类型检查方面适用于此处以外的组件,因为它们需要crawlsStatuses: ICrawlsStatus[];,但对于我的生活,我找不到一种方法使返回的对象在内部具有类型到,像:

return <ICrawlsStatus>{
  name: key,
  total: res.json()[key]
}

如果返回的密钥与我的界面不匹配,我想收到错误。例如名字,完全....

1 个答案:

答案 0 :(得分:3)

  

但是对于我的生活,我无法找到一种方法让返回的对象在内部具有类型,例如

只需创建一个局部变量:

const result: ICrawlsStatus = {
  name: key,
  total: res.json()[key]
}
return result;

更多

您应该尽可能避免类型断言:https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html