【问题标题】:Typescript error - Type 'string[]' cannot be used as an index type打字稿错误 - 类型“字符串 []”不能用作索引类型
【发布时间】:2018-06-07 22:02:47
【问题描述】:

我的 Ionic/Angular 应用程序出现打字错误。下面写着:

类型 'string[]' 不能用作索引类型。

我不明白。整个错误是:

[17:57:57] 打字稿:C:/xampp/htdocs/project x/anonymous-social/src/pages/threads/threads.ts,行:58 类型 'string[]' 不能用作索引类型。

L58: 让 threadId = Object(snapshot.val()[Object.keys(snapshot.val())]).threadId;

L59: 让 messageCount = snapshot.val().unread || 0;

我的代码是:

this.database.database.ref('/users/'+this.userData.uid+'/threads/')
.orderByChild('threadId')
.on('child_added', (snapshot) => {
      let threadId = Object(snapshot.val()[Object.keys(snapshot.val())]).threadId;
      let messageCount = snapshot.val().unread || 0;
      rec.push(Object(snapshot.val()[Object.keys(snapshot.val())]));

知道为什么会发生这种情况吗?我不完全明白...任何帮助都会很棒!

【问题讨论】:

    标签: javascript angular typescript


    【解决方案1】:

    snapshot.val()[Object.keys(snapshot.val())] 中,您正尝试使用Object.keys(snapshot.val())snapshot.val() 进行索引。

    Object.keys 返回类型string[]

    你有什么理由不能直接使用:

    let threadId = snapshot.val().threadId;
    

    我认为不需要所有额外的逻辑。

    【讨论】:

    • 是的,snapshot.val() 返回此图像中的第一行:i.gyazo.com/6eddab7527e3737cb1f72b96c040d6fe.png 并且对象键的内容返回第二行...
    • 快照值的预期形状是什么?听起来您似乎只希望它只有一个键值对,并且您希望 Object.keys 给您一个键。但是Object.keys 返回一个键数组。如果您真的确定它会有一个,那么您可以将其更改为 Object.keys(snapshot.val())[0] 并且 TS 会接受它,但我认为这里有很多不必要的复杂性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2021-04-23
    相关资源
    最近更新 更多