FirebaseError has a "code" property,但您如何在承诺的catch方法中阅读它?以下内容引发TypeScript错误:Property 'code' does not exist on type 'Error'.
this.af.database
.object(`/some/path`)
.set(newObj)
.then(data => {
console.log('success');
})
.catch(err => {
// Property 'code' does not exist on type 'Error'.
console.log(`code`, err.code);
});
答案 0 :(得分:6)
要访问代码属性,您需要导入firebase并为您的错误提供firebase.FirebaseError类型,如下所示:
import { AngularFire } from 'angularfire2';
import firebase from 'firebase';
...
constructor(
private af: AngularFire
) {}
...
this.af.database
.object(`/some/path`)
.set(newObj)
.then(data => {
console.log('success');
})
.catch( (err: firebase.FirebaseError) => {
// Give your error the firebase.FirebaseError type and
// you'll have access to all the FirebaseError properties
console.log(`code`, err.code);
console.log(`message`, err.message);
console.log(`name`, err.name);
console.log(`stack`, err.stack);
});
答案 1 :(得分:2)
虽然Patrickmcd的解决方法可行。这不是一个理想的解决方案。您不应该依赖于导入firebase对象以在错误对象上具有正确的类型。这违背了角度火力模块的要点。 它还会在您的应用程序中添加大量不必要的批量。 请在此处查看错误报告:https://github.com/angular/angularfire2/issues/666
计划在beta 7中修复
使用括号表示法和字符串文字我的解决方法不要求您导入Firebase库。
请参阅下面的示例
this.af.auth.login({
email: this.userEmail,
password: this.userPassword
}).catch(error => {
// Returns the firebase Error Code documented here https://firebase.google.com/docs/reference/js/firebase.auth.Error
console.log(error['code']);
// Returns the fire base message associated with the Error Code
console.log(error['message']);
// Show failed login validation
this.loginFailed = true;
});
希望这有帮助!
答案 2 :(得分:1)
另一种解决方案,您可以尝试从 '@firebase/util' 包中导入全局 FirebaseError 并使用类型保护进行检查,如下所示。
import { FirebaseError } from '@firebase/util'
try {
// Some firebase functions
await signInWithEmailAndPassword(auth, email, password)
} catch (error: unknown) {
if (error instanceof FirebaseError) {
console.error(error.code)
}
}