Saltar al contenido
TS7023

    ↑↓ mover · ⏎ abrir · esc cerrar

    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

    1. 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.

    2. 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.

    Adónde ir después

    Errores