angular - 如何检查 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
值?
解决方案
如果您在 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>
推荐阅读
- ruby-on-rails - 表单在 Ruby on Rails 上提交多个值后,奇怪的逗号和反斜杠穿过我的数据库
- java - 为什么切换到另一个屏幕时标准动画会起作用?
- prolog - 初学者 Prolog 问题 - 比较总是返回 false
- typescript - 如何在 TypeScript 中定义通用字段复制函数
- java - 如何在 24 小时内切片一段时间?
- google-sheets - Google Drive/Sheets:如何在不打开应用程序的情况下同步到本地
- postgresql - 无法加载库“D:/GreenSoftware/postgresql-13.2-1/pgsql/lib/postgis-3.dll”:找不到指定的模块
- swift - 使用 Heroku 的 Vapor 4 计划作业
- android - 当我将 android studio 从 4.1.2 更新到 4.1.3 时,出现 AppCompat not resolved 错误
- c++ - 基于范围的 for 循环和正常的 for 循环深度优先搜索实现之间的区别