TypeScript · Senior · Frage 41 von 75
Bleibt die Eingrenzung einer let-Variablen in einem Callback erhalten?
function f(x: string | number) {
if (typeof x === 'string') {
setTimeout(() => x.toUpperCase());
}
}- 1Ja, seit TS 5.4, wenn die Variable danach nicht neu zugewiesen wird
- 2Nein, nie: in Closures wird die Eingrenzung immer zurückgesetzt
- 3Ja, aber in jeder Version nur für
const-Variablen
Antwort zeigen
Richtige Antwort: Ja, seit TS 5.4, wenn die Variable danach nicht neu zugewiesen wird
Erklärung
Früher nahm TS in einem Callback an, x könnte neu zugewiesen werden, und setzte die Eingrenzung auf string | number zurück. Seit 5.4 versteht der Compiler, dass der Wert nach der letzten Zuweisung stabil ist, und behält die Eingrenzung. Für const funktionierte es schon vorher.