错误 TS2339:类型“”上不存在属性“包含”

Posted

技术标签:

【中文标题】错误 TS2339:类型“”上不存在属性“包含”【英文标题】:error TS2339: Property 'includes' does not exist on type ''错误 TS2339:类型“”上不存在属性“包含” 【发布时间】:2018-11-17 14:17:55 【问题描述】:

我遇到以下错误:

错误 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[] 类型时遇到了类似的错误,问题出在 es2017 的 tsconfig 中,但我已经有了:

"lib": [
      "es2017",
      "dom"
    ]

我哪里错了?

【问题讨论】:

不要使用new Promise。 ***.com/q/23803743/34397 您应该注释您的函数以声明它们实际返回的内容。 你应该使用map() & filter() 好的,谢谢@SLaks 我是 ATM 的初学者,我会尝试你的建议。我应该删除我的主题还是我的问题对某人有用? 【参考方案1】:

首先在这种情况下,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;
    )

【讨论】:

一切正常,谢谢。有趣(愚蠢?)的事情是我使用了一个 Promise,因为我遇到了一些异步问题,我认为我必须添加一个 Promise 才能使用 async/await... .once 已经返回了一个承诺,我们可以使用 then 链接事物

以上是关于错误 TS2339:类型“”上不存在属性“包含”的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript:TS2339 错误——“对象”类型上不存在属性

错误 TS2339:“主页”类型上不存在属性“路由器”

错误 TS2339:“字符串”类型上不存在属性“endsWith”

错误 TS2339:类型“Y”上不存在属性“x”

角度:错误 TS2339:“对象”类型上不存在属性“数据”

错误 TS2339:“FormData”类型上不存在属性“条目”