name: schema-patterns description: Effect Schema conventions and patterns. Triggers on Schema class creation, tagged unions, enums, type guards, or test fixtures using Effect Schema.
Effect Schema Patterns
Class Instantiation
ALWAYS use Schema.make() for creating instances:
// ✅ GOOD - Use Schema.make()
const user = Schema.make(User)({ name: 'Alice', age: 30 })
// ❌ BAD - Manual construction
const user = { _tag: 'User', name: 'Alice', age: 30 }
Type Guards
ALWAYS use Schema.is() or static .is method:
// ✅ GOOD
if (Standard.is(value)) { ... }
if (Schema.is(Standard)(value)) { ... }
// ❌ BAD - manual _tag check
if (value._tag === 'Standard') { ... }
Enums
ALWAYS inline enum values directly in Schema.Enums():
// ✅ GOOD - inline values, use .enums for runtime access
export const Status = Schema.Enums({
active: 'active',
inactive: 'inactive',
})
export type Status = typeof Status.Type
// Runtime: Status.enums.active
// ❌ BAD - separate const object
export const StatusValues = {
active: 'active',
inactive: 'inactive',
} as const
export const Status = Schema.Enums(StatusValues)
Key Points
- Use
Schema.make()for type-safe instantiation - Use
Schema.is()for type predicates, never manual_tagchecks - Inline enum values directly in
Schema.Enums() - Access runtime enum values via
.enumsproperty