function* getRoutesComponentsX(routes: Routes) {
yield* routes
.filter(route => route.component)
.map(route => route.component);
yield* routes
.filter(route => route.children)
.map(route => Array.from(getRoutesComponentsX(route.children!)))
.reduce((a, b) => a.concat(b), []);
}
TypeScript won't be able to follow the flow of control when using .filter instead of if statement.
That would sometimes lead to use of non-null assertion operator.
Removing the non-null assertion operator would lead to this error:

Here's essentially same code, albeit using just if statements, no more need to use the non-null assertion operator.
function* getRoutesComponents(routes: Routes) {
for (const route of routes) {
if (route.component) {
yield route.component;
}
if (route.children) {
yield* getRoutesComponents(route.children);
}
}
}
No comments:
Post a Comment