簡體   English   中英

打字稿:可能導致此錯誤的原因是什么? “元素隱式具有'任意'類型,因為類型'對象'沒有索引簽名”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM