Javascript 类型脚本错误-类型';字符串[]和#x27;不能用作索引类型

Javascript 类型脚本错误-类型';字符串[]和#x27;不能用作索引类型,javascript,angular,typescript,Javascript,Angular,Typescript,我的Ionic/Angular应用程序有一个typescript错误。下面写着: 类型“string[]”不能用作索引类型 我不明白。整个错误是: [17:57:57]typescript:C:/xampp/htdocs/project x/anonymous social/src/pages/threads/threads.ts,第58行 类型“string[]”不能用作索引类型 L58:让threadId=Object(snapshot.val()[Object.keys(snapshot.

我的Ionic/Angular应用程序有一个typescript错误。下面写着:

类型“string[]”不能用作索引类型

我不明白。整个错误是:

[17:57:57]typescript: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:let 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())]));
知道为什么会这样吗?我不完全明白。。。任何帮助都会很好

snapshot.val()[Object.keys(snapshot.val())]
中,您试图使用
Object.keys(snapshot.val())
索引到
snapshot.val()

Object.keys
返回类型
string[]

有什么原因不能直接使用:

let threadId = snapshot.val().threadId;

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

是的,
snapshot.val()
返回此图像中的第一行:而objectkeys则返回第二行……快照值的预期形状是什么?听起来好像你期望它只有一个键值对,而你期望
Object.keys
给你一个键。但是
Object.keys
返回一个键数组。如果您确实确定它会有一个,那么您可以将其更改为
Object.keys(snapshot.val())[0]
,TS也可以,但我认为这里有很多不必要的复杂性。