I am trying to iterate over object keys and values but TypeScript is shouting at me that:
Element implicitly has an
anytype because of typestringcan't be used to index type{ name: string; surname: string; gender: string; }
What am I doing wrong?
const DATA = {
name: "John",
surname: "Smith",
gender: "Male"
}
const result = Object.keys(DATA).map((d: string) => `${d} - ${DATA[d]}`)
Here is a screenshot of the error:

Element implicitly has an
anytype because expression of typestringcan't be used to index type{name: string; surname: string; gender: string; }.
No index signature with a parameter of typestringwas found on type...
Record typeconst DataRecord: Record<string, string> = {
name: "Johnny-come-lately",
surname: "Smithers",
gender: "Male"
}
for (const key of Object.keys(DataRecord)) {
console.log(`${key}: ${DataRecord[key]}`);
}
const DataIndexableType: {[key: string]: string} = {
name: "Johnny-come-lately",
surname: "Smithers",
gender: "Male"
}
for (const key of Object.keys(DataIndexableType)) {
console.log(`${key}: ${DataIndexableType[key]}`);
}
Object.entries()If for some reason it is not practical to add type information for the object, Object.entries() may be used without using type casting.
const DATA = {
name: "John",
surname: "Smith",
gender: "Male"
}
// Object.entries
for (const [key, value] of Object.entries(DATA)) {
console.log(`${key}: ${value}`);
}
// Or Object.entries.map
Object.entries(DATA).map( ([key, value]) => console.log(`${key}: ${value}`));
const DATA = {
name: "John",
surname: "Smith",
gender: "Male"
}
// Object.keys with typecast on key.
for (const key of Object.keys(DATA)) {
console.log(`${key}: ${DATA[key as keyof typeof DATA]}`);
}
const DATA = {
name: "John",
surname: "Smith",
gender: "Male"
}
// Object.keys with typecast on object.
for (const key of Object.keys(DATA)) {
console.log(`${key}: ${(DATA as {[key: string]: string})[key]}`);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With