Website-Suche

TypeScript - Kein "Variable wird verwendet, bevor sie zugewiesen wird" innerhalb einer Funktion


Ich möchte das folgende Verhalten von TypeScript verstehen:

Der folgende Code

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

wirft einen Fehler: "Variable 'a' wird verwendet, bevor sie zugewiesen wird.".

Aber der folgende Code

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

funktioniert einwandfrei und protokolliert "wie?".

Warum ist das so? Und außerdem, wie kommt es, dass a === undefined, wenn sein Typ number ist?

Antwort #1

Um den Fehler Variable 'a' wird verwendet, bevor sie zugewiesen wurde. zu beheben, denke ich, dass die einfache Lösung darin besteht, die Variable als entweder number oder undefined zu deklarieren, anstatt nur als number.

let a: number | undefined

Ein weiteres Muster besteht einfach darin, eine Variable mit einem Wert zu initialisieren:

let a: number = 0

Ich habe dieses Muster vor Jahren oft in C# verwendet, aber persönlich gefällt mir dieses Muster in JavaScript nicht und ich ziehe vor, was du machst, eine Variable nicht festzulegen, wenn die Bedingungen zur Zuweisung eines Wertes bedingt sind.

Antwort #2

Es gibt ein offenes Problem dazu im Typescript-GitHub-Projekt. Es ist eine Einschränkung des technischen Designs von Typescript.

Von Ryan Cavanaugh, es ist

weil wir die Flusskontrolleffekte von Funktionen nicht inline setzen

Verwandte Artikel