TS7023
No se puede inferir el retorno recursivo
'factorial' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions.Las palabras del propio compilador. Sin traducir — es la cadena que pegaste en el buscador.
Una función recursiva pide a la inferencia conocer su tipo de retorno antes de que ese mismo tipo se haya establecido.
Reproducción
function factorial(n: number) {
return n <= 1 ? 1 : n * factorial(n - 1)
}La compilación afirma que esto emite exactamente este código.
Por qué lo dice el compilador
La inferencia sigue la expresión de retorno, que llama a la función cuyo retorno se está infiriendo. El ciclo no tiene una anotación independiente que lo ancle, así que el modo estricto se niega a resolverlo como `any`.
Arreglos
- 01
function factorial(n: number): number { return n <= 1 ? 1 : n * factorial(n - 1) }
Anota explícitamente el límite recursivo; el cuerpo se comprobará contra él.
- 02
function factorial(n: number) { let result = 1 for (let value = 2; value <= n; value += 1) { result *= value } return result }Una forma iterativa elimina el ciclo de inferencia cuando la recursión no es esencial.
Conclusión
Las funciones recursivas son un buen lugar para retornos explícitos: la anotación rompe el ciclo y documenta el invariante.
