我有一个返回Observable<void>
的函数,我需要它返回一个立即发出并完成的可观察对象。通常我会使用of
操作符来执行此操作,但它不适用于void
。
我试过但不奏效的事:
return of(); // doesn't emit
return of({}); // TypeScript compilation error 'Type 'Observable<{}>' is not assignable to type 'Observable<void>'.'
我试过的方法都有效,但我不喜欢:
return of({}).map(() => {}); // does extra work just to avoid compiler error
return of({}) as unknown as Observable<void>; // yucky casting
return new Observable<void>(s => {s.next(); s.complete();}); // verbose
我目前使用的是最后一个,因为它不需要做额外的工作,但我更喜欢像of
这样的快捷方式。
简短明了:of(null)
或of(undefined)
.
可以返回of(void 0)
实时演示:https://stackblitz.com/edit/rxjs-yn6dmr
您可以为操作符of
设置泛型类型:
return of<void>(undefined);
如果你不愿意,也可以这样写:
return of(((): void => {})());
也可以返回EMPTY
:
import { EMPTY, Observable } from "rxjs";
function test(): Observable<void> {
return EMPTY
}
test().subscribe(e => console.log("sub"))