typescript - Typen må ha en '[Symbol.iterator]()'-metode som returnerer en iterator
Jeg bruker denne koden for å iterere gjennom et tilpasset objekt:
interface TableItemBody {
[fieldId: string]: string
}
interface TableItem {
[tabId: string]: TableItemBody | TableItemBody[]
}
const iterate = (entry: TableItem) => {
for (const tabId of Object.keys(entry)) {
if (Array.isArray(entry[tabId])) {
for (const idx of entry[tabId]) {
for (const fieldId of Object.keys(entry[tabId][idx])) {
console.log(fieldId)
}
}
} else {
for (const fieldId of Object.keys(entry[tabId])) {
console.log(fieldId)
}
}
}
}
const tableItem: TableItem = {
tab1: {
field1: 'fieldValue'
},
tab2: [{
field2: 'fieldValue'
}]
}
iterate(tableItem)
Men jeg får to feil. Den første er Type 'TableItemBody | TableItemBody[]' must have a '[Symbol.iterator]()' method that returns an iterator. Jeg bruker Array.isArray(entry[tabId]) for å sikre at jeg faktisk itererer gjennom et array. Så hvorfor dukker denne feilen opp?
Hvis du vil leke med den koden, her er lenken til TypeScript-lekeplassen.
Svar #1
Du må kaste det til TableItemBody[]. Se her
const iterate = (entry: TableItem) => {
for (const tabId of Object.keys(entry)) {
if (Array.isArray(entry[tabId])) {
const tableItems = entry[tabId] as TableItemBody[]
for (const tableItem of tableItems) {
for (const fieldId of Object.keys(tableItem)) {
console.log(fieldId)
}
}
} else {
for (const fieldId of Object.keys(entry[tabId])) {
console.log(fieldId)
}
}
}
}
