const obj = {
a: 1,
b: 'foo',
};
for (const k of (Object.keys(obj) as (keyof typeof obj)[])) {
obj[k] = obj[k];
}
TS游乐场:https://www.typescriptlang.org/play?#code/MYewdgzgLgBCBGArGBeGBvAUDHMCGAXDAIwA02u8RA5AGYgjXkC+A3JpvQE4wAUokWAGs4tPgHkkAU2BQAdEKkBPCLwSIAlPgh9FSkGKhKADlINwkGgNoBdDVqy4LiK0Jupnrm+2ZA 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
保持number
and obj.b
保持string
。我假设发生此错误是因为 TS 期望的类型obj[k]
to be string | number
.
有没有办法让 TS 为每个键维护正确的值类型?
这是一种方法,使用泛型来获取密钥作为type 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);
}
游乐场链接 https://www.typescriptlang.org/play?#code/MYewdgzgLgBCBGArGBeGBvAUDHMCGAXDAIwA02u8RA5AGYgjXkC+A3JprQK5jBQCW4GBACmUADwBpGCIAeUEWAAmEGAGsRATxC0YUTQAcROuEgB8ACjUwikgJQYKOBIgDaagLqpTbz+2Yc9ABOMBagkLDWJhYA8kgifAB0GpoQFi4OeKpWWib6RiYZrh52Dli4wmJWdv5AA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)