如何检查可观察对象是否为 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>