microsoft / microsoft/TypeScript
Discriminated union with 11+ items does not handle nullability same as union with <10 items
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 132
Beschreibung
🔎 Search Terms
10 11 union undefined type
Nullability narrowing is inconsistent between type discriminated unions of <=10 items and >10 items
🕗 Version & Regression Information
- This changed between versions 4.2.3 and 4.3.5 (before it would complain about undefined in both cases)
⏯ Playground Link
💻 Code
// Union with 11+ items does not handle nullability same as union with <10 items
declare let a3: { type: "1" } | { type: "2" } | undefined;
if(a3!.type === "1"){
// 'a3' is possibly 'undefined'.(18048)
console.log(a3.type);
}
declare let a10: { type: "1" } | { type: "2" } | { type: "3" } | { type: "4" } | { type: "5" } | { type: "6" } | { type: "7" } | { type: "8" } | { type: "9" } | { type: "10" } | undefined;
if(a10!.type === "1"){
// No error (better behavior?)
console.log(a10.type);
}
🙁 Actual behavior
Complains about undefined for unions with >10 members, but not for unions <11
🙂 Expected behavior
It seems like it should not error in either case - the code inside the if can only execute if the a3 variable is not undefined
Additional information about the issue
Relevant function in checker.ts: getKeyPropertyName(). That is where the 10 magic value comes from.
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 mit der bereitgestellten Playground-Reproduktion und untersuche checker.ts, insbesondere getKeyPropertyName(), wo der Schwellenwert von 10 Elementen identifiziert wird. Vergleiche die Verengung der Nullbarkeit für die beiden Union-Größen und berücksichtige das im Issue angegebene erwartete Verhalten: Kein Beispiel sollte innerhalb des abgesicherten Blocks undefined melden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100