首页 > 解决方案 > 如何检查 observable 是否属于 NEVER 类型?

问题描述

我在我的角度应用程序中有一个案例,如果初始值为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$
  }
}

我知道 rxjsNEVER基本上是new Observable<never>(noop()). 但我的问题是,有没有办法知道isInitiallyOpen$流实际上持有一个NEVER值?

标签: angularrxjs

解决方案


如果您在 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>


推荐阅读