簡體   English   中英

重新分配值時,為每個鍵維護 object 值類型

[英]Maintain object value types for each key when reassigning values

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

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

TS Playground: https://www.typescriptlang.org/play?#code/MYewdgzgLgBCBGArGBeGBvAUDHMCGAXDAIwA02u8RA5AGYgjXkC+A3JpvQE4wAUokWAGs4tPgHkkAU2BQAdEKkBPCLwSIAlPgh9FSkGKhKADlINwkGgNoBdDVqy4LiK0Jupnrm+2ZA

我越來越:

Type 'string | number' is not assignable to type 'never'.
  Type 'string' is not assignable to type 'never'.

obj對每個鍵都有不同的值類型,我想維護每個鍵的值類型。 換句話說,我希望obj.a保持numberobj.b保持string 我假設發生此錯誤是因為 TS 期望obj[k]的類型為string | number string | number

有沒有辦法讓 TS 為每個鍵保持正確的值類型?

這是一種方法,使用 generics 將密鑰作為類型K而不是作為運行時值k獲取:

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

function set<K extends keyof typeof obj>(k : K) {
    obj[k] = obj[k];
}

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

游樂場鏈接

暫無
暫無

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

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