<R extends Record<string, Equivalence.Equivalence<any>>>(
fields: R
): Equivalence.Equivalence<{
readonly [K in keyof R]: [R[K]] extends [
Equivalence.Equivalence<infer A>
]
? A
: never
}>Creates an Equivalence for a struct by providing an Equivalence for each
property. Two structs are equivalent when all their corresponding properties
are equivalent.
When to use
Use when you need equality for a record-like object to be decided field by field, with a custom equality rule for each property.
Details
This is an alias of Equivalence.Struct. Each property's equivalence is
checked independently; all must return true for the overall result to be
true.
Example (Comparing structs for equivalence)
import { Equivalence, Struct } from "effect"
const PersonEquivalence = Struct.makeEquivalence({
name: Equivalence.strictEqual<string>(),
age: Equivalence.strictEqual<number>()
})
console.log(PersonEquivalence({ name: "Alice", age: 30 }, { name: "Alice", age: 30 }))
// true
console.log(PersonEquivalence({ name: "Alice", age: 30 }, { name: "Bob", age: 30 }))
// falseexport const const makeEquivalence: <
R extends Record<string, Equivalence<any>>
>(
fields: R
) => Equivalence<{
readonly [K in keyof R]: [R[K]] extends [
Equivalence<infer A>
]
? A
: never
}>
Creates an Equivalence for a struct by providing an Equivalence for each
property. Two structs are equivalent when all their corresponding properties
are equivalent.
When to use
Use when you need equality for a record-like object to be decided field by
field, with a custom equality rule for each property.
Details
This is an alias of Equivalence.Struct. Each property's equivalence is
checked independently; all must return true for the overall result to be
true.
Example (Comparing structs for equivalence)
import { Equivalence, Struct } from "effect"
const PersonEquivalence = Struct.makeEquivalence({
name: Equivalence.strictEqual<string>(),
age: Equivalence.strictEqual<number>()
})
console.log(PersonEquivalence({ name: "Alice", age: 30 }, { name: "Alice", age: 30 }))
// true
console.log(PersonEquivalence({ name: "Alice", age: 30 }, { name: "Bob", age: 30 }))
// false
makeEquivalence = import EquivalenceEquivalence.Struct