![](/img/trans.png)
[英]Object.keys iteration causing Typescript error “Element implicitly has an 'any' type because index expression is not of type 'number'”
[英]Typescript: what could be causing this error? “Element implicitly has an 'any' type because type 'Object' has no index signature”
我正在嘗試使用嵌套屬性獲取對象中所有鍵的數組,我的代碼:
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]給出了錯誤“Element隱式具有'any'類型,因為類型'Object'沒有索引簽名”。 我看了一些其他線程有相同的錯誤,但似乎他們的情況是不同的
我在游樂場嘗試了這個功能,但那里沒有這個問題。 但是在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]
),並將遞歸結果合並到數組中。
此外, return keys
現在在for循環之后,而不是在else中。
您不應該使用Object
作為類型,而是使用文檔中所寫的 any
:
您可能希望Object扮演類似的角色,就像在其他語言中一樣。 但是Object類型的變量只允許你為它們分配任何值 - 你不能在它們上調用任意方法,即使是實際存在的方法。
使用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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.