'User' 不能分配给类型 'void'

'User' is not a assignable to type 'void'

几个月来我一直在使用 Ionic 4 和 Firestore。一旦我去了 Firestore 和 Ionic 4,很多东西都坏了,所以我从头开始。我正在关注 AngularFirebase Ionic Google 登录 iOS 和 Android Youtube 教程,我收到以下错误:

[ng] src/app/pages/login/login.page.ts(35,7) 中的错误:错误 TS2322:类型 'User' 不可分配给类型 'void'.

我使用的代码与教程中的代码完全相同,但不确定为什么会出现此错误。

    import { Component, OnInit } from '@angular/core';
    import * as firebase from 'firebase/app';
    import { AngularFireAuth } from 'angularfire2/auth';
    import { Observable, of } from 'rxjs';
    import { GooglePlus } from '@ionic-native/google-plus/ngx';
    import { environment } from '../../../environments/environment';

@Component({
  selector: 'app-login',
  templateUrl: './login.page.html',
  styleUrls: ['./login.page.scss'],
})
export class LoginPage  {

  user: Observable<firebase.User>;

  constructor(private afAuth: AngularFireAuth,
               private gplus: GooglePlus) {

        this.user = this.afAuth.authState;
      }
  googleLogin() {
    this.nativeGoogleLogin();
  }

    async nativeGoogleLogin(): Promise<void> {
      try {

      const gplusUser = await this.gplus.login({
        'webClientId': environment.googleWebClientId,
        'offline': true,
        'scopes': 'profile email'
      });

           return await this.afAuth.auth.signInWithCredential(
         firebase.auth.GithubAuthProvider.credential(gplusUser.idToken)
      );

          } catch (err) {
              console.log(err);
          }
        }
      }

我从来没有写过一行 Angular 所以请耐心等待。但是我写了一些打字稿。

您(或本教程的作者)将此 Promise 的 return 类型设置为 void 并且如果登录成功则您是 returning 用户,如果登录成功则为 void登录失败

async nativeGoogleLogin(): Promise<void> { ... }

这 return 是某种类型的用户对象

return await this.afAuth.auth.signInWithCredential(
   firebase.auth.GithubAuthProvider.credential(gplusUser.idToken)
);

尝试将方法的 return 值更新为 User 或 void(用于捕获)

async nativeGoogleLogin(): Promise<firebase.User | void> {
    try {

    const gplusUser = await this.gplus.login({
        'webClientId': environment.googleWebClientId,
        'offline': true,
        'scopes': 'profile email'
    });

    return await this.afAuth.auth.signInWithCredential(
        firebase.auth.GithubAuthProvider.credential(gplusUser.idToken)
    );

    } catch (err) {
        console.log(err);
    }
}

signInWithCredential 是 returning 一个 firebase.User 对象,因此您可以将函数的 return 类型更改为 Promise<firebase.User>.

async nativeGoogleLogin(): Promise<firebase.User> {
      try {

      const gplusUser = await this.gplus.login({
        'webClientId': environment.googleWebClientId,
        'offline': true,
        'scopes': 'profile email'
      });

           return await this.afAuth.auth.signInWithCredential(
         firebase.auth.GithubAuthProvider.credential(gplusUser.idToken)
      );

          } catch (err) {
              console.log(err);
          }
        }
      }