Búsqueda de sitios web

TypeScript - No "La variable se usa antes de ser asignada" dentro de una función


Me gustaría entender el siguiente comportamiento de TypeScript:

El siguiente código

let a: number
if (a === undefined) {
    console.log("how?")
}

genera un error: "La variable 'a' se usa antes de ser asignada.".

Pero el siguiente código

let a: number
const f = (): void => {
    if (a === undefined) {
        console.log("how?")
    }
}
f()

funciona perfectamente y registra "¿cómo?".

¿Por qué es eso? Y además, ¿cómo es que a === undefined si su tipo es number?

Respuesta #1

Para tratar el error Variable 'a' se usa antes de ser asignada. la solución simple que creo es declarar la variable como ya sea number o undefined, en lugar de solo number.

let a: number | undefined

Otro patrón es simplemente inicializar una variable con un valor:

let a: number = 0

Usé mucho ese patrón en C# hace años, pero personalmente no me gusta ese patrón en JavaScript y prefiero lo que tienes de dejar una variable sin asignar si las condiciones para asignarle un valor son condicionales.

Respuesta #2

Hay un problema abierto sobre esto en el proyecto de Typescript en GitHub. Es una limitación del diseño técnico de Typescript.

De Ryan Cavanaugh, es

porque no incorporamos los efectos de control de flujo de las funciones

Artículos relacionados