gpt4 book ai didi

typescript - 使用 UMD 构建时如何将 RxJS 与类型定义结合使用?

转载 作者:行者123 更新时间:2023-12-02 03:07:06 24 4
gpt4 key购买 nike

例如:

  1. npm 我@reactivex/rxjs
  2. 创建一个index.ts文件,其中包含一些使用RxJs的函数
  3. 创建一个引用 RxJs UMD 构建和typescript 编译器根据index.ts 创建的index.js 文件一个。

这里有一个重现:https://github.com/valeriob/Repro_rxjs_typescript只需运行“tsc”即可看到编译错误。

在这种情况下编辑index.ts时如何获取类型定义?

遵循这些准则 https://github.com/zspitz/TypeScript-Handbook/blob/release-2.0/pages/Modules.md#umd-modules我能够通过附加“导出为 namespace rxjs;”来使其工作到文件node_modules/rxjs/index.d.ts。

如果这应该是解决方案,那么它应该由库作者完成吗?

最佳答案

我设法找到了解决方法,因为 rxjs 不使用其 UMD 包的类型定义进行构建。

首先,这仅适用于 TS >= 3.5,因为您必须打开 allowUmdGlobalAccess ,否则会给你这个错误:

TS2686: 'rxjs' refers to a UMD global, but the current file is amodule. Consider adding an import instead.

通过检查文件node_modules/rxjs/dist/bundles/rxjs.umd.js的末尾,您可以发现操作符测试ajaxwebSocketfetch 就像子命名空间,其他所有内容都直接位于全局 rxjs 下:

...

var operators = _operators;
var testing = _testing;
var ajax$1 = _ajax;
var webSocket$1 = _webSocket;
var fetch$1 = _fetch;

exports.operators = operators;
exports.testing = testing;
exports.ajax = ajax$1;
exports.webSocket = webSocket$1;
exports.fetch = fetch$1;
exports.Observable = Observable;
exports.ConnectableObservable = ConnectableObservable;
exports.GroupedObservable = GroupedObservable;
exports.observable = observable;
...

所以您所要做的就是创建一个 .d.ts 文件,如下所示:

export * from 'rxjs'
export * as operators from 'rxjs/operators'
export * as testing from 'rxjs/testing'
export * as ajax from 'rxjs/ajax'
export * as webSocket from 'rxjs/webSocket'
export * as fetch from 'rxjs/fetch'

export as namespace rxjs

现在您可以在任何 ts 文件中使用全局 rxjs:

const { interval } = rxjs
const { filter } = rxjs.operators

interval(500).pipe(
filter(t => t % 2 === 0)
).subscribe(t => console.log(t))

关于typescript - 使用 UMD 构建时如何将 RxJS 与类型定义结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58728020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com