rescript-lang / rescript-lang/rescript
Record spread from smaller to bigger record type set doesn't work
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- OCaml
- Sterne
- 7.5k
- Forks
- 485
- Ø Merge
- 1 T. 2 Std.
- Gemergte PRs (30 T.)
- 55
Beschreibung
I observed some weird behavior while working on my app, so I tried to reduce the problem to a minimal example.
type a = {
title: string,
ingredients: array<string>,
}
type b = {
...a,
parsedIngredients: array<string>,
}
// This works
let a: a = {
title: "Pizza",
ingredients: ["1 EL Oil", "1 EL flour"],
}
// EXPECTED: This should compile
let b: b = {
// ERROR: This has type `a`, but it's expected to have type `b`
...a,
parsedIngredients: ["Oil", "Flour"],
}
I don't know if I misunderstood the record type spread feature, but IMO from an intuition perspective I'd expect value b to initialize just fine, since we are essentially spreading in all the values that a has, plus the parsedIngredients value that's required from b.
Does this work as expected?
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
Reproduziere zuerst das minimale record-spread-Beispiel aus dem Issue; es ist keine Quelldatei, kein Test und kein Compiler-Einstiegspunkt genannt. Verfolge das Verhalten der record-spread-Typprüfung und füge einen Regressionstest hinzu, der zeigt, ob ein kleinerer Record den größeren Typ initialisieren kann, und bestätige anschließend das erwartete Ergebnis.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- ocaml
- 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