Eu projetei uma função para procurar um objeto em um array de objetos aninhados infinitamente (ou desconhecidos).
Meu design:
const findActualParent = (parentId:Number, serviceList: Service[] | Service) =>{
for (const service of serviceList){
if(service.id == parentId){
return service
}
if(service.children?.length>0){
let actualParent: Service = findActualParent(parentId, service.children)!
return actualParent!
}
}
return null
}
Esta função (e meu aplicativo) funcionavam bem até eu tentar compilar o aplicativo para implantação ( npm run build
). Ele não compilava, apresentando um erro do TypeScript referenciando minha nova função:
Type must have a '[Symbol.iterator]()' method that returns an iterator
Passei muito tempo pesquisando sobre isso, com a maioria das respostas propondo adicionar diferentes versões do ES no meu compilerOptions
. tsconfig
Tentei várias versões e nenhuma funcionou para mim (minhas opções são ["dom", "dom.iterable", "esnext"]
).
Então me deparei com outra publicação online, um tanto sem relação com a minha pergunta. Tinha a ver com o operador de dispersão em arrays, mas testei na minha implementação. E funcionou? Atualizei meu loop de busca com isto:for (const service of serviceList as any[])
Então, basicamente, estou passando um array estritamente tipado para minha função e, posteriormente, revogando o tipo. Com essa modificação, o aplicativo foi construído e implantado perfeitamente.
Alguém pode explicar por que isso funcionou? E/ou se a minha maneira de iterar um array tipado está errada? Se estiver, por favor, sugira uma solução que funcione independentemente da versão do ES/TS.
Obrigado