gpt4 book ai didi

javascript - typescript :可能导致此错误的原因是什么? "Element implicitly has an ' 任何类型,因为类型 'Object' 没有索引签名”

转载 作者:行者123 更新时间:2023-11-30 11:43:10 25 4
gpt4 key购买 nike

我正在尝试获取具有嵌套属性的对象中所有键的数组,我的代码:

public static getKeys(obj: Object) {
let keys: string[] = [];
for (let k in obj) {
if (typeof obj[k] == "Object" && obj[k] !== null) {
keys.push(obj[k]);
CHelpers.getKeys(<Object>obj[k]);
} else {
return keys;
}
}
}

但是,obj[k] 给我错误消息“元素隐含地具有‘任意’类型,因为‘对象’类型没有索引签名”。我查看了其他一些有相同错误的线程,但它们的情况似乎有所不同

我尝试了 playground 中的功能但那里没有这个问题。但是在 Webstorm 中,它给出了这个错误;可能是什么原因造成的?

最佳答案

我很确定这就是您想要的:

function getKeys(obj: any) {
let keys: string[] = [];

for (let k in obj) {
keys.push(k);
if (typeof obj[k] == "object") {
keys = keys.concat(getKeys(obj[k]));
}
}

return keys;
}

请注意,我将其更改为推送键本身 (k) 而不是值 (obj[k]),并且递归结果连接到数组中。
此外,返回键 现在位于 for 循环之后,而不是在 else 中。

你不应该使用 Object 作为类型,而是使用 any 作为 written in the docs :

You might expect Object to play a similar role, as it does in other languages. But variables of type Object only allow you to assign any value to them - you can’t call arbitrary methods on them, even ones that actually exist.

可以使用 Object.keys 简化函数:

function getKeys(obj: any) {
let keys = Object.keys(obj);
Object.keys(obj).forEach(key => {
if (typeof obj[key] === "object") {
keys = keys.concat(getKeys2(obj[key]));
}
});

return keys;
}

关于javascript - typescript :可能导致此错误的原因是什么? "Element implicitly has an ' 任何类型,因为类型 'Object' 没有索引签名”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41929287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com