microsoft / microsoft/TypeScript
narrowing doesn't work when spreading from ternary operator
Offen
Dieses Issue hat noch niemand übernommen.
Awaiting More Feedback
Suggestion
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
Bug Report
🔎 Search Terms
narrow spread ternary
🕗 Version & Regression Information
v4.5.0-dev.20210907
⏯ Playground Link
Playground link with relevant code
💻 Code
interface Foo {
type: "foo"
foo: string
}
interface Bar {
type: "bar"
bar: number
}
declare const thing: Foo|Bar
const otherThing: Foo|Bar = { //error: Type '"foo" | "bar"' is not assignable to type '"foo"'.
type: thing.type,
...(thing.type === "foo" ? { foo: thing.foo } : { bar: thing.bar })
}
🙁 Actual behavior
error: Type '"foo" | "bar"' is not assignable to type '"foo"'.
🙂 Expected behavior
no error, since it's not possible for the object to not match either the Foo or Bar types
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 verlinkten TypeScript Playground und dem minimalen Foo|Bar-Beispiel. Verfolge, wie der Type Checker das Narrowing innerhalb eines ternären Ausdrucks behandelt, der in einem Object Spread verwendet wird. Als abgeschlossen gilt die Aufgabe, wenn das Beispiel ohne Fehler typgeprüft wird und dabei die korrekte Prüfung inkompatibler Spread-Zweige erhalten bleibt.
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
- 35/100