我正在将Firebase集成到我的React应用程序中,并使用TypeScript。Firebase是从firebase.js
导入的,它是:
class Firebase {
constructor() {
app.initializeApp(config);
}
doEmailUpdate = (email:string) => {
if (app.auth().currentUser) {
return app.auth().currentUser?.updateEmail(email)
}
return Promise.reject();
}
... more functions ...
}
export default Firebase;
第一个问题:Firebase函数updateEmail
返回Promise<void>
,而doEmailUpdate
的返回类型(在VSCode中按CTRL获得)是Promise<void>|undefined
。为什么undefined
是一个选项?当然Promise.reject()
也会返回一个承诺吗?我的结构正确吗?
firebase.doEmailUpdate(formState.email)
.then(() => {...})
.catch(error => {...})
但是我得到一个TypeScript错误
对象可能'未定义'
可能是因为函数可以返回undefined。
我做错了什么?我如何确保updateEmail
总是返回一个承诺,或一些可以适合然后/捕获结构?
这里的罪魁祸首是可选的链接操作符(?.)
。如果currentUser
是null
或undefined
,那么你的代码将返回undefined
(这就是运算符所做的)。
在这种情况下根本不需要它,你可以这样做:
let user = app.auth().currentUser;
if (user) {
return user.updateEmail(email)
}