microsoft / microsoft/TypeScript
Type narrowing for optional chaining in OR expression in AND expression
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
TypeScript Nightly version 3.8.0-dev.20191113
Playground link
Compiler Options:
{
"compilerOptions": {
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictPropertyInitialization": true,
"strictBindCallApply": true,
"noImplicitThis": true,
"noImplicitReturns": true,
"useDefineForClassFields": false,
"alwaysStrict": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"downlevelIteration": false,
"noEmitHelpers": false,
"noLib": false,
"noStrictGenericChecks": false,
"noUnusedLocals": false,
"noUnusedParameters": false,
"esModuleInterop": true,
"preserveConstEnums": false,
"removeComments": false,
"skipLibCheck": false,
"checkJs": false,
"allowJs": false,
"experimentalDecorators": false,
"emitDecoratorMetadata": false,
"target": "ES2017",
"module": "ESNext"
}
}
Input:
const f = (a: { b: boolean, c: number } | undefined) => (a?.b || null) && a.c;
Output:
Compiler error: Object is possibly 'undefined'.(2532)
Expected behavior:
Successful compilation
Note:
const f = (a: { b: boolean, c: number } | undefined) => (a?.b || false) && a.c;
(using false instead of null) works as expected.
Related issues:
https://github.com/microsoft/TypeScript/issues/34570
https://github.com/microsoft/TypeScript/issues/33806
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 dem verknüpften TypeScript Playground und reproduziere den Fehler im bereitgestellten Ausdruck mit optional chaining. Vergleiche ihn anschließend mit dem funktionierenden Ausdruck, der false verwendet. Sieh dir die zugehörigen Issues als Kontext an; als erledigt gilt die Aufgabe, wenn die ursprüngliche Eingabe erfolgreich kompiliert wird, ohne das erwartete Narrowing-Verhalten zu verlieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100