( fields: R )
| 221 | * @since 2.0.0 |
| 222 | */ |
| 223 | export const struct = <R extends Record<string, Equivalence<any>>>( |
| 224 | fields: R |
| 225 | ): Equivalence<{ readonly [K in keyof R]: [R[K]] extends [Equivalence<infer A>] ? A : never }> => { |
| 226 | const keys = Object.keys(fields) |
| 227 | return make((self, that) => { |
| 228 | for (const key of keys) { |
| 229 | if (!fields[key](self[key], that[key])) { |
| 230 | return false |
| 231 | } |
| 232 | } |
| 233 | return true |
| 234 | }) |
| 235 | } |