我使用此代码来迭代自定义对象:
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)
Run Code Online (Sandbox Code Playgroud)
但是,我收到两个错误。第一个是Type 'TableItemBody | TableItemBody[]' must have a '[Symbol.iterator]()' method that returns an iterator.我用来Array.isArray(entry[tabId])确保我实际上正在迭代数组。那么为什么会出现这个错误呢?
如果您想使用该代码,这里是打字稿游乐场的链接。
您需要将其投射到TableItemBody[]. 看这里
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)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26912 次 |
| 最近记录: |