簡體   English   中英

在 Typescript 的 for 循環中使用泛型

[英]Using generics in a for loop in Typescript

這是這個問題的后續: 在重新分配值時維護每個鍵的對象值類型這會產生一個錯誤:

const obj = {
    a: 1,
    b: 'foo',
};

for (const k of (Object.keys(obj) as (keyof typeof obj)[])) {
    obj[k] = obj[k];
}

為了修復它,我可以使用泛型和forEach

(Object.keys(obj) as (keyof typeof obj)[])
    .forEach(<T extends keyof typeof obj>(k: T) => {
        obj[k] = obj[k];
    });

有沒有辦法在 for 循環中使用泛型? 我沒有在我的代碼庫中的其他任何地方使用forEach ,我希望保持一致。 另外,我不想定義單獨的(非匿名)函數,因為forEach會更干凈。

TS游樂場: https://www.typescriptlang.org/play?#code/MYewdgzgLgBCBGArGBeGBvAUDHMCGAXDAIwA02u8RA5AGYgjXkC+A3JpvQE4wAUokWAGs4tPgHkkAU2BQAdEKkBPCLwSIAlPgh9FSkGKhKADlINwkGgNoBdDVqy4LiK0Jupnrm+2YdekxBl5PVV1LTwdXj1zI1NzMNsNChw5bgBRPGAAC14AHgAVGCkADygpMAATHWjDEzMxdQA+KKJ8rRRGjGSnTzcPdS92J2YNViA

這是不可能的。 在這種情況下,TypeScript 不夠聰明,無法檢測到允許訪問和分配它。 您唯一可以做的就是在該行上方添加@ts-ignore注釋:

const obj = {
    a: 1,
    b: 'foo',
};

for (const k of (Object.keys(obj) as (keyof typeof obj)[])) {
    // @ts-ignore
    obj[k] = obj[k];
}

https://www.typescriptlang.org/play?#code/MYewdgzgLgBCBGArGBeGBvAUDHMCGAXDAIwA02u8RA5AGYgjXkC+A3JpvQE4wAUokWAGs4tPgHkkAU2BQAdEKkBPCLwSIAlPgh9FSkGKhKADBAlBYgSkGKhKADBYBYgSkAccDAlMBAybqAccAdlbagsqAccAdlbagsqAygjBYgS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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