Node.js 错误TS2339:属性';包括';不存在于类型';{}';
我有以下错误: 错误TS2339:类型“{}”上不存在属性“includes” 当尝试检查用户名是否被使用时。(当我评论这个错误,然后用ng serve开始,然后取消注释它时,它非常有效,但我不能用错误启动我的发球,这就是我使用这个技巧的原因) 服务:Node.js 错误TS2339:属性';包括';不存在于类型';{}';,node.js,angular,typescript,firebase,promise,Node.js,Angular,Typescript,Firebase,Promise,我有以下错误: 错误TS2339:类型“{}”上不存在属性“includes” 当尝试检查用户名是否被使用时。(当我评论这个错误,然后用ng serve开始,然后取消注释它时,它非常有效,但我不能用错误启动我的发球,这就是我使用这个技巧的原因) 服务: isUsernameAvailable(){ const users = []; return new Promise(function(resolve, reject){ firebase.database().re
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[]类型上有类似的错误,问题出在tsconfig与es2017中,但我已经有了:
"lib": [
"es2017",
"dom"
]
我错在哪里?首先,在这种情况下,不需要使用
新承诺
,您只需返回承诺即可。其次,您需要将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;
})
}
不要使用
新承诺
。你应该注释你的函数以声明它们实际返回的内容。你应该使用map()
&filter()
。好的,谢谢@SLaks,我是一个有承诺的初学者,我会尝试你的建议。我应该删除我的主题还是我的问题对某人有用?很好,谢谢。有趣的是,我使用了一个承诺,因为我遇到了一些异步问题,我想我必须添加一个承诺来使用async/await…。一旦
已经返回了一个承诺,我们就可以使用将事情链接起来