错误TS2339:财产'包括'类型' {}'上不存在

时间:2018-06-07 15:29:37

标签: node.js angular typescript firebase promise

我遇到以下错误:

  

错误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"
    ]

我哪里错了?

1 个答案:

答案 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;
    })
}