Vorrei un modo per definire i record correlati. Ad esempio,Registra variazioni in F #
type Thing = { field1: string; field2: float }
type ThingRecord = { field1: string; field2: float; id: int; created: DateTime }
o
type UserProfile = { username: string; name: string; address: string }
type NewUserReq = { username: string; name: string; address: string; password: string }
type UserRecord = { username: string; name: string; address: string; encryptedPwd: string; salt: string }
insieme con un modo per convertire da una all'altra, senza bisogno di scrivere tanto boilerplate. Anche il primo esempio in piena sarebbe:
type Thing =
{ field1: string
field2: float }
with
member this.toThingRecord(id, created) =
{ field1 = this.field1
field2 = this.field2
id = id
created = created } : ThingRecord
and ThingRecord =
{ field1: string
field2: float
id: int
created: DateTime }
with
member this.toThing() =
{ field1 = this.field1
field2 = this.field2 } : Thing
Come si arriva fino a field10
ecc, si arriva a essere una responsabilità.
Attualmente lo faccio in modo non sicuro (e lento) utilizzando il riflesso.
Ho aggiunto una richiesta per la sintassi with
da estendere alle definizioni di record su uservoice, che soddisferebbe questa necessità.
Ma c'è forse un modo tipicamente valido per farlo già? Forse con i fornitori di tipi?
Bummer, stavo pensando di farlo la prossima settimana se nessuno avesse una soluzione esistente, ma il fatto (sorprendente) che i provider di tipi non supportano i tipi di record in qualche modo uccide quell'idea. –
Bene, se hai due settimane, puoi sempre iniziare facendo in modo che il provider di tipi emetta i tipi di record;) – scrwtp
Interamente disponibile, ma salvami un paio di giorni: dove dovrei iniziare? –