如何在Typescript中正确地写这个?
var obj = {
kv: {
foo: 'bar',
bar: 'baz'
}
};
for(const k in obj.kv) {
const v = obj.kv[k];
obj.kv[k] = 'prefix' + v;
// error TS7017: Index signature of object type implicitly has an 'any' type.
}
// desired output:
// { kv: { foo: 'prefixbar', bar: 'prefixbaz' } }
我想更新obj.kv
对象上的每个项目。
答案 0 :(得分:2)
你可以这样重构:
var obj = {
kv: {
foo: 'bar',
bar: 'baz'
}
};
for (const k of Object.keys(obj.kv))
{
const v = (obj.kv as any)[k];
(obj.kv as any)[k] = 'prefix' + v;
}
答案 1 :(得分:2)
const obj = {
kv: {
foo: 'bar',
bar: 'baz'
}
};
Object.entries(obj.kv).forEach(([key, value]) => {
obj.kv[key] = `prefix${value}`;
});
请注意,ECMAScript 2016中添加了entries
方法。如果您没有本地或通过polyfill可用,则可以编写
Object.entries(obj.kv)
.map(key => [key, obj.kv[key]])
.forEach(([key, value]) => {
obj.kv[key] = `prefix${value}`;
});
代替。
答案 2 :(得分:1)
虽然有点冗长,但这种类型更友好:
var obj = {
kv: {
foo: 'bar',
bar: 'baz'
} as {
[key:string]: string,
}
};
for (const k of Object.keys(obj.kv)) {
const v = obj.kv[k];
// error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
// const erroneous = Math.round(v);
obj.kv[k] = 'prefix' + v;
}