inherent trade-off in TypeScript's type system: stricter types are safer, but often more complex. https://pscanf.com/s/341/