【问题标题】:Specifying return type in a angular2 typescript method在 angular2 typescript 方法中指定返回类型
【发布时间】:2016-05-07 09:02:06
【问题描述】:

我有一个数据访问方法,我使用 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]
}

如果返回的键与我的界面不匹配,我想得到一个错误。例如名字,完全......

【问题讨论】:

    标签: typescript angular ecmascript-6


    【解决方案1】:

    但对于我来说,我无法找到一种方法让返回的对象在内部具有一个类型,比如

    只需创建一个局部变量:

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

    更多

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

    【讨论】:

    • 这很有趣,但在这种情况下,结果或多或少是一个类似于我的数组方法的冗余变量。我希望有更多的 1 班轮返回 ICrawlsStatus 类型。这不可能吗?
    • 关于类型断言,如果是你做的,你会不会尝试在这里包含一个类型?
    猜你喜欢
    • 1970-01-01
    • 2017-03-09
    • 2019-07-22
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2017-05-28
    相关资源
    最近更新 更多