我希望有一种方法来定义相关记录。例如,
type Thing = { field1: string; field2: float }
type ThingRecord = { field1: string; field2: float; id: int; created: DateTime }
或者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 }
同时提供一种从一种格式转换到另一种格式的方法,而无需编写太多样板代码。即使完整的第一个示例也将是:
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
当你开始使用field10
等字段时,它会成为一种负担。
目前我使用反射以一种不安全(且缓慢)的方式执行此操作。
我在uservoice上为记录定义添加了一个请求,希望将with
语法扩展到记录定义中,以满足这个需求。
但是也许已经有一种类型安全的方法可以做到这一点了吗?也许可以使用类型提供程序?