键入'可观察<用户 |空 | undefined>' 不可分配给类型 'Observable<User>'

Posted

技术标签:

【中文标题】键入\'可观察<用户 |空 | undefined>\' 不可分配给类型 \'Observable<User>\'【英文标题】:Type 'Observable<User | null | undefined>' is not assignable to type 'Observable<User>'键入'可观察<用户 |空 | undefined>' 不可分配给类型 'Observable<User>' 【发布时间】:2021-04-18 22:06:07 【问题描述】:

我正在尝试使用 Firestorm 创建 Google 登录。但是自从创建指南以来,很多事情都发生了,我找不到答案:(

所以问题是:

export class AuthService 
  
  user$: Observable<User>; //This Observable can be NULL or undefined.

  constructor(
        private afAuth: AngularFireAuth,
        private afs: AngularFirestore,
        private router: Router
  ) 
    

    this.user$ = this.afAuth.authState.pipe(   //this one is not assignable to null or undefined
      switchMap(user => 
          // Logged in
        if (user) 
          return this.afs.doc<User>(`users/$user.uid`).valueChanges();
         else 
          // Logged out
          return of(null);
        
      )
    )
    
   

我总是收到这个错误:

键入'可观察的' 不可分配给类型 “可观察”。输入“用户 |空 | undefined' 不可赋值 键入“用户”。 类型“未定义”不可分配给类型“用户”.ts(2322)

但我不知道该怎么做。

这是原始文档:

https://fireship.io/lessons/angularfire-google-oauth/

【问题讨论】:

现在正在做同样的课程。感谢您在这里提问! 【参考方案1】:

在您的方法中,您可能会返回 null,因此您也可以将 user$ Observable 声明为可能为 null 或未定义

  user$: Observable<User | null | undefined>;

【讨论】:

非常感谢:) 这就是我最终要寻找的东西。打字稿让我想扔掉我的电脑。 除了告诉 TypeScript 闭嘴之外,这是否还有其他(可能是负面的)后果?

以上是关于键入'可观察<用户 |空 | undefined>' 不可分配给类型 'Observable<User>'的主要内容,如果未能解决你的问题,请参考以下文章

如何返回一个空的可观察对象

角度形式控制最后可观察到的变化

React 如何订阅在另一个组件中声明的可观察对象

打字稿:键入'字符串| undefined' 不能分配给 type 'string'

我可以举一个现实生活中的例子,其中非静态成员函数不访问通过空指针调用的对象会导致可观察到的问题吗? [复制]

如何让突变观察者检测文本区域的值变化?