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

Extending a record type with another record type in F#

我有两种记录类型:

type Employee = {
        Id:          string
        Name:        string
        Phone:       string
}
    
type AuditLog = {
    PerformedBy: string
    PerformedOn: string
}

以下是记录类型的实例:

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

let log = {
    PerformedBy = "234"
    PerformedOn = "1/1/1"
}

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

let combined = {
    Id = "123"
    Name = "Abc"
    Phone = "999"
    PerformedBy = "234"
    PerformedOn = "1/1/1"
}

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

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

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

  3. 创建一个包含 2 个字段的 2 种类型的记录,这并不是您要查找的内容。

像 Typescript 这样的一些语言有 交集类型 ,你可以在其中将一个类型定义为具有一组其他类型的字段(因为创建的类型的字段是 union 的组合类型,“intersection”对我来说听起来很奇怪)。我想您正在寻找它,但它在 F# 和大多数语言中不可用。