Website-Suche

node.js - Variable wird verwendet, bevor sie zugewiesen wird


Ich versuche, ein Objekt anhand von JSON-Objektwerten zuzuweisen und es zurückzugeben

interface Input {
    vehicles: Vehicle[];
    costs: Cost;
}

function readInput(fileName: string): Input{
    let input: Input;

    readFile(fileName, function (err, data) {
        if (err) {
            throw err;
        }
        input = JSON.parse(data.toString("utf8"));
    });

    return input;
}

Es erscheint ein Fehler, dass die Eingabevariable bereits als let input: Input „verwendet“ wird. Dies stammt vom Terminal mit dem Befehl tsc -w

src/input.ts(43,12): error TS2454: Variable 'input' is used before being assigned.
19:22:01 - Compilation complete. Watching for file changes.

Antwort #1

Die einzige Zuweisung an die Variable input erfolgt innerhalb der Callback-Funktion, die an readFile übergeben wird.

Typescript ist nicht in der Lage, allein durch statische Typanalyse zu bestimmen, dass die Zuweisung tatsächlich erfolgen wird (z. B. könnte if (err) der Fall sein), oder sogar zu entscheiden, ob die Callback-Funktion überhaupt aufgerufen wird (d. h. es ist möglich, readFile so zu implementieren, dass sie Ihre Funktion niemals aufruft).

Außerdem deutet der Name der Funktion readFile darauf hin, dass sie asynchron zu sein scheint, was bedeutet, dass es wahrscheinlich ist, dass Ihr Callback nach der Ausführung von readInput() aufgerufen wird.

Wenn man all dies berücksichtigt, kann TypeScript nicht garantieren, dass zum Zeitpunkt von return input; die Zuweisung an diese Variable erfolgt sein wird (und ich bin ziemlich überzeugt, dass sie tatsächlich nicht erfolgen wird).

Verwandte Artikel