如何检查可观察对象是否为 NEVER 类型?
How to check if an observable is of NEVER type?
我的 angular 应用程序中有一个案例,如果初始值为 NEVER
:
,我需要更改 observable
export class MyComponent {
@Input() isInitiallyOpen$?: Observable<boolean> = NEVER;
constructor(private myService: MyService) {
this.isOpen$ = this.isInitiallyOpen$ ?? this.myService.isOpen$; // NOT WORKING
// this.isOpen$ = NEVER at this point, and not this.myService.isOpen$
}
}
我知道rxjs的NEVER
基本就是new Observable<never>(noop())
。但我的问题是,有没有办法知道 isInitiallyOpen$
流实际上持有 NEVER
值?
如果你检查 GitHub 项目中的 NEVER Observable,你可以看到它基本上是一个带有 noop 函数的空 Observable:
export const NEVER = new Observable<never>(noop)
因此您可以检查变量是否等于 NEVER
。下面我做了一些测试供你使用。
const { NEVER, Observable, noop } = rxjs;
const foo$ = NEVER
const bar$ = NEVER
console.log("foo$ === bar$: ", foo$ === bar$) // true
console.log("foo$ === NEVER: ", foo$ === NEVER) // true
console.log("foo$ === Observable: ", foo$ === Observable) // false
console.log("foo$ === new Observable(): ", foo$ === new Observable()) // false
console.log("foo$ === Observable(() => {}): ", foo$ === new Observable(() => {})) // false
console.log("foo$ === Observable(noop): ", foo$ === new Observable(noop)) // false
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/7.4.0/rxjs.umd.min.js"></script>
我的 angular 应用程序中有一个案例,如果初始值为 NEVER
:
export class MyComponent {
@Input() isInitiallyOpen$?: Observable<boolean> = NEVER;
constructor(private myService: MyService) {
this.isOpen$ = this.isInitiallyOpen$ ?? this.myService.isOpen$; // NOT WORKING
// this.isOpen$ = NEVER at this point, and not this.myService.isOpen$
}
}
我知道rxjs的NEVER
基本就是new Observable<never>(noop())
。但我的问题是,有没有办法知道 isInitiallyOpen$
流实际上持有 NEVER
值?
如果你检查 GitHub 项目中的 NEVER Observable,你可以看到它基本上是一个带有 noop 函数的空 Observable:
export const NEVER = new Observable<never>(noop)
因此您可以检查变量是否等于 NEVER
。下面我做了一些测试供你使用。
const { NEVER, Observable, noop } = rxjs;
const foo$ = NEVER
const bar$ = NEVER
console.log("foo$ === bar$: ", foo$ === bar$) // true
console.log("foo$ === NEVER: ", foo$ === NEVER) // true
console.log("foo$ === Observable: ", foo$ === Observable) // false
console.log("foo$ === new Observable(): ", foo$ === new Observable()) // false
console.log("foo$ === Observable(() => {}): ", foo$ === new Observable(() => {})) // false
console.log("foo$ === Observable(noop): ", foo$ === new Observable(noop)) // false
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/7.4.0/rxjs.umd.min.js"></script>