Skip to content
awekrx edited this page May 29, 2026 · 1 revision

coerce

Import

import { coerce } from '@dev-suite/decorators/coerce'

Category

  • parameter

Use Case

Convert incoming parameter type (string -> number/boolean/date/etc.).

Replaces

  • Inline Number()/Boolean() conversions
  • Duplicated parsing in controllers

Example 1

Without decorator

class BillingController {
  list(limit: unknown) {
    const n = Number(limit);
    return this.service.list(n);
  }
}

With decorator

import { coerce } from '@dev-suite/decorators/coerce';

class BillingController {
  list(@coerce({ to: 'number' }) limit: number) {
    return this.service.list(limit);
  }
}

Why better

  • Centralizes cross-cutting behavior.
  • Method/class/property code stays focused on domain logic.

Example 2

Without decorator

class FeatureController {
  toggle(enabled: unknown) {
    const flag = enabled === 'true' || enabled === true;
    return this.service.toggle(flag);
  }
}

With decorator

import { coerce } from '@dev-suite/decorators/coerce';

class FeatureController {
  toggle(@coerce({ to: 'boolean' }) enabled: boolean) {
    return this.service.toggle(enabled);
  }
}

Why better

  • Second scenario reuses same policy without duplication.
  • Behavior is more consistent and easier to audit.

Clone this wiki locally