现在已经使用rxjs一段时间了,但是不了解某些东西,其中之一就是concat。 rxjs site中的示例:
const sourceOne = of(1, 2, 3);
//emits 4,5,6
const sourceTwo = of(4, 5, 6);
//emit values from sourceOne, when complete, subscribe to sourceTwo
const example = sourceOne.pipe(concat(sourceTwo));
但是,在我的角度项目中,这给了我这个错误:
TS2345: Argument of type 'Observable<number>' is not assignable to parameter of type 'OperatorFunction<number, {}>'.
Type 'Observable<number>' provides no match for the signature '(source: Observable<number>): Observable<{}>'.
不知道为什么,有人可以启发我吗?谢谢。
答案 0 :(得分:1)
该示例工作正常。我在stackblitz上重新创建了它:https://stackblitz.com/edit/rxjs-6z6pjk?file=index.ts
代码:
import { of } from 'rxjs';
import { map, concat } from 'rxjs/operators';
const sourceOne = of(1, 2, 3);
//emits 4,5,6
const sourceTwo = of(4, 5, 6);
//emit values from sourceOne, when complete, subscribe to sourceTwo
const example = sourceOne.pipe(
concat(sourceTwo))
.subscribe(x => console.log(x));
package.json
{
"name": "typescript-5i4anz",
"version": "0.0.0",
"private": true,
"dependencies": {
"rxjs": "6.4.*"
}
}
答案 1 :(得分:1)
您输入的是错误的 A B C D E
A 0 1 0 1 0
B 0 0 1 0 1
C 0 0 0 1 0
D 0 0 0 0 1
E 1 1 1 0 0
。您想将其用作运算符,因此必须导入
concat
您要从import { concat } from 'rxjs/operators';
导入concat
,这是一种可以观察到的创建方法,而不是运算符。
它将在更高版本的RxJS中重命名,因为它太容易引起误解:https://github.com/ReactiveX/rxjs/issues/3927