rescript-lang / rescript-lang/rescript
Record spread from smaller to bigger record type set doesn't work
Nessuno ha ancora preso questa issue.
- Lingua principale
- OCaml
- Stelle
- 7.5k
- Fork
- 485
- Merge medio
- 1g 2h
- PR unite (30g)
- 55
Descrizione
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?
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Riproduci prima l’esempio minimo di record-spread nell’issue; non sono indicati alcun file sorgente, test o punto di ingresso del compilatore. Traccia il comportamento del controllo dei tipi di record-spread e aggiungi un test di regressione che mostri se un record più piccolo può inizializzare il tipo più grande, quindi conferma il risultato atteso.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- ocaml
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100