在 F# 中用另一种记录类型扩展记录类型

Rob*_*131 7 f# record

我有两种记录类型:

type Employee = {
        Id:          string
        Name:        string
        Phone:       string
}
    
type AuditLog = {
    PerformedBy: string
    PerformedOn: string
}
Run Code Online (Sandbox Code Playgroud)

以下是记录类型的实例:

let emp = {
    Id = "123"
    Name = "Abc"
    Phone = "999"
}

let log = {
    PerformedBy = "234"
    PerformedOn = "1/1/1"
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以组合这两个实例的字段来创建新的记录/匿名记录类型,如下所示?

let combined = {
    Id = "123"
    Name = "Abc"
    Phone = "999"
    PerformedBy = "234"
    PerformedOn = "1/1/1"
}
Run Code Online (Sandbox Code Playgroud)

cit*_*kid 7

在 F# 中,记录类型不能以其他方式继承或组合。要获得具有组合字段的类型,您唯一能做的就是

  1. 显式创建与现有 2 种类型无关的新记录

  2. 匿名创建此类类型,@JL0PD 指向匿名类型的文档。在某些情况下,匿名类型可能非常有用,但在大多数情况下,显式类型是更好的选择 - 使代码更具可读性。

  3. 创建一个包含 2 个字段和 2 种类型的记录,这并不是您真正想要的。

某些语言(例如 Typescript)具有交集类型,您可以将类型定义为具有一组其他类型的字段(因为创建类型的字段是组合类型的并集,“交集”对我来说听起来很奇怪)。我猜您正在寻找该功能,但 F# 和大多数语言中都没有该功能。