Skip to content

prefer-discriminated-union

Flag flat result objects with a required positive boolean status and optional success/failure payloads.

Why

When success and failure are mutually exclusive outcomes, a boolean plus optional branch data permits contradictory and incomplete states.

Fix

If the outcomes are mutually exclusive, represent each branch as a discriminated union member with its required payload.

Examples

Before — flagged Do not make both result payloads optional
src/result.ts
type Result = { ok: boolean; data?: string; error?: string };
After — preferred Use explicit result branches
src/result.ts
type Result = { ok: true; data: string } | { ok: false; error: string };