我遇到以下错误:
错误TS2339:财产'包括'类型' {}'。
上不存在
尝试检查是否使用了用户名。 (当我评论此错误时,它完全正常工作,然后从ng服务开始,然后取消注释,但我无法使用错误启动我的服务,这就是我使用此技巧的原因)
服务:
isUsernameAvailable(){
const users = [];
return new Promise(function(resolve, reject){
firebase.database().ref('users').orderByKey().once('value').then(snapshot => {
snapshot.forEach(childSnapshot => {
if(childSnapshot.val().username){
users.push(childSnapshot.val().username);
}
})
resolve(users);
})
});
}
组件:
async checkUsername(){
const username=this.signupForm.get('username').value;
const usernames =await this.authService.isUsernameAvailable();
if(usernames.includes(username)){
this.usernameAvailable=false;
}
else {
this.usernameAvailable=true;
}
}
我看到有些人在类型为String []时遇到类似的错误,问题出现在使用es2017的tsconfig中,但我已经有了:
"lib": [
"es2017",
"dom"
]
我哪里错了?
答案 0 :(得分:0)
首先,在这种情况下,不需要使用new Promise
,您只需返回承诺即可。其次,您需要正确键入users
作为string[]
,这将有助于返回类型推断。
isUsernameAvailable() {
return firebase.database().ref('users').orderByKey().once('value').then(snapshot => {
const users:string[] = [];
snapshot.forEach(childSnapshot => {
if (childSnapshot.val().username) {
users.push(childSnapshot.val().username);
}
})
return users;
})
}