Node.js 错误TS2339:属性';包括';不存在于类型';{}';

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

我有以下错误:

错误TS2339:类型“{}”上不存在属性“includes”

当尝试检查用户名是否被使用时。(当我评论这个错误,然后用ng serve开始,然后取消注释它时,它非常有效,但我不能用错误启动我的发球,这就是我使用这个技巧的原因)

服务:

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…
。一旦
已经返回了一个承诺,我们就可以使用
将事情链接起来