如何声明 Rx.Observable.fromPromise() 的 TypeScript 返回类型

Posted

技术标签:

【中文标题】如何声明 Rx.Observable.fromPromise() 的 TypeScript 返回类型【英文标题】:How to declare TypeScript return type of Rx.Observable.fromPromise() 【发布时间】:2017-06-20 00:02:18 【问题描述】:

我有一个函数返回一个从承诺创建的Rx.Observable,如下所示:

var data$ = fetchData();
fetchData() 
    return Rx.Observable.fromPromise(fetch("someUrl"));

在 Visual Studio Code 中,如果我将鼠标悬停在变量 data$ 上,它会显示类型为 Observable<Response>。但是,如果我明确声明函数返回类型,例如fetchData(): Rx.Observable<Response> ... 我得到一个错误:“找不到名称'响应'。”

它在将返回类型声明为Observable<any> 时有效,但这太笼统了。我应该如何声明函数返回类型以匹配Observable<Response>data$ 类型?

【问题讨论】:

【参考方案1】:

由于 fetch-api 仍处于试验阶段,根据您的 Typescript-Version,您可能无法提供 fetch-api 的所有类型 - 在这种情况下,您可以尝试从 npm 安装 @types/whatwg-fetch-typings。

npm install @types/whatwg-fetch

你也可以在 github 上关注这个帖子以获取未来的更新:https://github.com/Microsoft/TypeScript/issues/4948

【讨论】:

抱歉,我应该提到这是一个 Node 项目,所以我使用的是 node-fetch,我确实安装了这些类型。要使用fetch 我有import fetch from "node-fetch"; 似乎我可以做import * as Response from "../node_modules/node-fetch/lib/response"; 但这似乎不正确(指定模块的完整路径),即使这样做我仍然得到“找不到名称'响应' 。”错误。 尝试npm install --save @types/node-fetch并使用import Response from "node-fetch";【参考方案2】:

您需要安装类型:

npm install --save @types/whatwg-fetch

【讨论】:

以上是关于如何声明 Rx.Observable.fromPromise() 的 TypeScript 返回类型的主要内容,如果未能解决你的问题,请参考以下文章

1如何声明一个类?如何创建类的对象?

HTML变量如何声明并使用

如何在jupyter里声明编码

如何在声明未映射到 AD 帐户的情况下执行 WIF/声明模拟?

我如何解释这个看似函数声明但不符合通常模式的声明?

如何减轻类声明远离文件中的所有者命名空间声明?