如何在打字稿中使用 rxjs6 分区?

Posted

技术标签:

【中文标题】如何在打字稿中使用 rxjs6 分区?【英文标题】:How to use rxjs6 partition in typescript? 【发布时间】:2018-11-24 05:17:08 【问题描述】:

当我尝试在 typescript 中使用 rxjs6 partition 时,会引发类型不匹配错误。官方文档中的示例也引发了该错误。我想我必须投射一些东西,但我不知道是什么。有什么建议吗?

import fromEvent from 'rxjs';
import partition from 'rxjs/operators';

document.body.innerhtml = "<DIV width=100 height=100></DIV>"


//Example Code from https://rxjs-dev.firebaseapp.com/api/operators/partition
const clicks = fromEvent(document, 'click');
const parts = clicks.pipe(partition(ev => ev.target.tagName === 'DIV'));
const clicksOnDivs = parts[0];
const clicksElsewhere = parts[1];
clicksOnDivs.subscribe(x => console.log('DIV clicked: ', x));
clicksElsewhere.subscribe(x => console.log('Other clicked: ', x)); 

错误:

'UnaryFunction, [Observable, Observable]>' 不可分配给类型参数 '操作员功能'。键入'[可观察的, Observable]' 不可分配给类型 'Observable'。 类型“[Observable, Observable]”中缺少属性“_isScalar”。

见https://stackblitz.com/edit/typescript-fdqhws

【问题讨论】:

【参考方案1】:

pipe 的类型目前还不够灵活,无法支持 partition 作为可管道操作符,partition 的文档在撰写本文时并不是很有帮助: https://github.com/ReactiveX/rxjs/issues/2995

我相信有人要求在 RxJS7 中将其设为静态函数: https://github.com/ReactiveX/rxjs/issues/3797

作为一种解决方法,试试这个:

const clicks = fromEvent(document, 'click');
const parts = partition(ev => ev.target.tagName === 'DIV')(clicks);

【讨论】:

以上是关于如何在打字稿中使用 rxjs6 分区?的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿中声明函数类型

如何在打字稿中扩展字符串?

如何在打字稿中使用中间件键入 redux thunk

如何在打字稿中使用 singleton() 在构造函数中传递值?

如何在打字稿中正确使用 lodash-es?

如何在打字稿中键入枚举变量?