microsoft / microsoft/TypeScript
Object is possibly null inside a closure defined within a const constraint
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
Search: Object is possibly null, narrowed type, type constraint, closure
Code
const foo: string | null = 'bar'
if (foo) {
function baz() {
console.log(foo.length) // Object is possibly 'null'
}
}
Expected behavior:
Compiles
Actual behavior:
const foo: string | null
Object is possibly 'null'
Playground Link:
Related Issues:
#12113, #33319, #9998
Discussion:
By design, type narrowings are reset inside closures. This makes sense, but there is one case where better assumptions can be made: when the closure is defined inside a type constraint block AND the type narrowing is based on a const value. Even if called from async, the closure is still referencing a const and was created after a suitable type constraint occurred.
Thoughts?
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das bereitgestellte TypeScript-Beispiel im verlinkten Playground zu reproduzieren, und vergleiche es mit den verwandten Issues #12113, #33319 und #9998. Im Issue werden weder Quelldatei noch Test genannt; abgeschlossen wäre die Aufgabe, wenn Einigkeit darüber erzielt wurde, ob dieses auf const basierende Narrowing innerhalb der Closure weiterhin gültig sein sollte, und das vereinbarte Verhalten anhand eines kompilierenden Beispiels demonstriert wurde.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 28/100