我使用 Angular 8、Firebase 6.6.2 和 rxjs 6.4.0。由于我使用的是 rxjs 最新版本,因此我在管道内使用了 switchMap。但我在回复中收到以下错误。
'(user: User) => AngularFireObject<AppUser>' 类型的参数不能分配给'(value: User, index: number) => ObservableInput<any>' 类型的参数。
类型“AngularFireObject<AppUser>”不可分配给类型“ObservableInput<any>”。
“AngularFireObject<AppUser>”类型中缺少属性“[Symbol.iterator]”,但在“Iterable<any>”类型中是必需的。
这是我的代码:
用户服务.ts
get(uid: string): AngularFireObject<AppUser> {
return this.db.object('/users/' + uid);
}
应用程序用户.ts
export interface AppUser {
name: string;
email: string;
isAdmin: boolean;
}
admin-auth.service.ts
export class AdminAuthService implements CanActivate {
constructor(private auth: AuthService, private userService: UserService) { }
canActivate(): Observable<boolean> {
return this.auth.user$
.pipe(switchMap(user=> {
return this.userService.get(user.uid);
}));
}
auth.service.ts
export class AuthService {
user$: Observable<firebase.User>;
constructor(private afAuth: AngularFireAuth, private route: ActivatedRoute) {
this.user$ = afAuth.authState;
}
gLogin() {
const returnUrl = this.route.snapshot.queryParamMap.get('returnUrl') || '/';
localStorage.setItem('returnUrl', returnUrl);
this.afAuth.auth.signInWithRedirect(new firebase.auth.GoogleAuthProvider());
}
gLogout() {
this.afAuth.auth.signOut();
}
}
数据库: