Tengo el siguiente método dentro de un componente Angular:
public mapInvoices(invoices: any[]): Record<string, any> { return invoices.reduce((map, obj) => { map[obj.letterType] = obj; return map; }, {}); }Cuando ejecuto la prueba unitaria para este componente, aparece el siguiente problema:
APAUInvoicesDocumentsComponent › should create TypeError: Cannot read property 'reduce' of undefined 37 | 38 | public mapInvoices(invoices: any[]): Record<string, any> { > 39 | return invoices.reduce((map, obj) => { | ^ 40 | map[obj.letterType] = obj; 41 | return map; 42 | }, {});Podría evitar este problema asignando un valor predeterminado al parámetro como:
public mapInvoices(invoices: any[] = [])pero me gustaría entender por qué sucede esto.
Para responder a su pregunta, es porque se está llamando a mapInvoices con un parámetro undefined . Al establecer un valor predeterminado, en realidad está anulando el estado inicial.
public mapInvoices(invoices?: any[] = []) {} mapInvoices(); // call bombs without a default value