Back to all reviewers

use Effect Option consistently

unionlabs/union
Based on 3 comments
TypeScript

Replace null, undefined, and error throwing with Effect's Option type for handling potentially missing values. This provides better type safety, composability, and prevents null reference errors.

Null Handling TypeScript

Reviewer Prompt

Replace null, undefined, and error throwing with Effect’s Option type for handling potentially missing values. This provides better type safety, composability, and prevents null reference errors.

Instead of returning null:

// ❌ Avoid
getBannerForEdition(edition: "app" | "btc"): BannerConfig | null {
  // ...
}

// ✅ Prefer
getBannerForEdition(edition: "app" | "btc"): Option.Option<BannerConfig> {
  // ...
}

Instead of using undefined:

// ❌ Avoid  
address = $state<Hex | undefined>(undefined)

// ✅ Prefer
address = $state<Option.Option<Hex>>(Option.none())

Instead of throwing errors for missing values:

// ❌ Avoid
export function evmDisplayToCanonical(displayAddress: string): Uint8Array {
  if (!/^0x[0-9a-fA-F]{40}$/.test(displayAddress)) {
    throw new Error("EVM address must be 0x followed by 40 hex characters")
  }
  // ...
}

// ✅ Prefer  
export function evmDisplayToCanonical(displayAddress: AddressEvmDisplay): Option.Option<AddressCanonicalBytes> {
  // validation handled by schema, return Option for safety
  // ...
}

Option provides a composable API with methods like map, flatMap, and getOrElse that make handling optional values more explicit and less error-prone than null checks.

3
Comments Analyzed
TypeScript
Primary Language
Null Handling
Category

Source Discussions