# PartialEq
The `PartialEq` macro generates an `equals()` method for field-by-field
structural equality comparison. This is analogous to Rust's `PartialEq` trait,
enabling value-based equality semantics instead of reference equality.
## Generated Output
| Type | Generated Code | Description |
|------|----------------|-------------|
| Class | `equals(other: unknown): boolean` | Instance method with instanceof check |
| Enum | `equalsEnumName(a: EnumName, b: EnumName): boolean` | Standalone function using strict equality |
| Interface | `equalsInterfaceName(a: InterfaceName, b: InterfaceName): boolean` | Standalone function comparing fields |
| Type Alias | `equalsTypeName(a: TypeName, b: TypeName): boolean` | Standalone function with type-appropriate comparison |
## Comparison Strategy
The generated equality check:
1. **Identity check**: `this === other` returns true immediately
2. **Type check**: For classes, uses `instanceof`; returns false if wrong type
3. **Field comparison**: Compares each non-skipped field
## Type-Specific Comparisons
| Type | Comparison Method |
|------|-------------------|
| Primitives | Strict equality (`===`) |
| Arrays | Length + element-by-element (recursive) |
| `Date` | `getTime()` comparison |
| `Map` | Size + entry-by-entry comparison |
| `Set` | Size + membership check |
| Objects | Calls `equals()` if available, else `===` |
## Field-Level Options
The `@partialEq` decorator supports:
- `skip` - Exclude the field from equality comparison