AngularFire2 类型:“'FirebaseObjectObservable<any>' 类型上不存在属性 'take'”

Posted

技术标签:

【中文标题】AngularFire2 类型:“\'FirebaseObjectObservable<any>\' 类型上不存在属性 \'take\'”【英文标题】:AngularFire2 typings: "Property 'take' does not exist on type 'FirebaseObjectObservable<any>'"AngularFire2 类型:“'FirebaseObjectObservable<any>' 类型上不存在属性 'take'” 【发布时间】:2017-02-10 00:40:17 【问题描述】:

我已将我的 ionic 应用程序从 beta 11 更新到 rc0。所以这意味着我已经从 typescript 1.8 切换到了 2。

我已经根据这个站点配置了 AngularFire2 Getting Started with Ionic 2 RC0, Firebase 3 + AngularFire 2

我有这行代码工作:

this.af.database.object(`comments/$commentId`).take(1).subscribe(
    data => console.log(data)
);

但是现在出现这个错误

错误 TS2339:类型上不存在属性“take” 'FirebaseObjectObservable'。

对正在发生的事情有任何想法吗?我该如何解决这个问题?

【问题讨论】:

您是否正在使用:import 'rxjs/add/operator/take'; 导入 rxjs take 运算符 谢谢!它解决了这个问题:) 您可以发布答案,我会接受它作为解决方案。 我导入了操作符,但仍然收到错误消息:( 【参考方案1】:

如果您的 Angular 版本为 6 及以上。

在下面使用:

从“rxjs/operators”导入 take, map ;

安装 - npm install --save rxjs-compat

还可以将管道与其他功能(Take、Map)一起使用。

timer(0, 10) .pipe(take(1000)) .pipe(map(() => x));

【讨论】:

【参考方案2】:

this.auth.authState.pipe(take(1)).subscribe(user=>

);

【讨论】:

【参考方案3】:

对于 rxjs (v6) 和 angularfire (v5) 的更新版本,我使用的语法是:

import  take  from 'rxjs/operators'

...

this.afAuth.authState.pipe(take(1)).subscribe(user => 
  ...
)

【讨论】:

【参考方案4】:

从上面发布用户@codedesignr的答案,以便这个问题可以有一个官方的解决方案:

使用 import 'rxjs/add/operator/take'; 导入 rxjs take 运算符

【讨论】:

以上是关于AngularFire2 类型:“'FirebaseObjectObservable<any>' 类型上不存在属性 'take'”的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 错误找不到模块 'angularfire2/interfaces' ionic 3 angularfire2-offline

地图运算符。不同的函数类型和访问器

引导模式 + Angularfire2

angularfire2:未启用 Cloud Firestore API

从“angularfire2/database”导入 AngularFireDatabase, FirebaseListObservable ;

/angularfire2/index 没有导出成员 'AngularFire'