---
title: Referencia de la API
description: Especificación de `I18nErrorBase`, `setErrorMessage` y los tipos relacionados.
---

## `I18nErrorBase` [#i18n-error-base]

Clase base para heredar de `Error`. `message` se resuelve según `lang`.

```ts
import { I18nErrorBase } from "i18n-error-base";

class MyError extends I18nErrorBase<{ code: string }> {}
```

### Parámetros de tipo [#type-params]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `TMeta` | `ErrorMeta \| undefined` | `ErrorMeta \| undefined` | Tipo de `meta`. Si no se usa, especifique `undefined`. |

### Propiedades estáticas [#static-props]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `prefix?` | `string` | `undefined` | Se antepone al mensaje resuelto. |

### Propiedades de instancia [#instance-props]

| Prop | Type | Description |
| ---- | ---- | ----------- |
| `meta` | `TMeta` | Información adicional del constructor. Se puede leer y escribir. |
| `message` | `string` | Se resuelve según `lang`. Es enumerable. |
| `cause` | `unknown` | Causa pasada con `ErrorOptions`. Propiedad estándar de `Error`. |

### Constructor [#constructor]

Si `TMeta` no incluye `undefined`, `meta` es obligatorio.

```ts
new MyError(meta, message, options?)
```

Si `TMeta` es `undefined`, se puede omitir `meta`.

```ts
new MyError(message, options?)
new MyError(meta, message, options?)
```

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `meta` | `TMeta` | Información adicional para generar mensajes. |
| `message` | `string \| MessageFactory<TMeta>` | Mensaje predeterminado para idiomas no registrados. Las funciones reciben `meta`. |
| `options` | `ErrorOptions` | Opciones compatibles con el segundo argumento de `Error` (como `{ cause }`). |

### Orden de resolución [#resolution-order]

1. Obtiene `lang` de `getGlobalConfig()` (si no está configurado, `"en"`).
2. Ejecuta con `meta` la función registrada para esa clase y ese idioma.
3. Si no está registrado, usa el mensaje predeterminado.
4. Si existe `static prefix`, lo antepone.

:::note
Los registros son por clase. Los del padre no se heredan. Registre cada clase.
:::

## `setErrorMessage` [#set-error-message]

Registra funciones creadoras de mensajes por idioma.

```ts
import { setErrorMessage } from "i18n-error-base";

setErrorMessage(MyError, (meta) => `...: ${meta.code}`, "ja");
```

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `reference` | `I18nErrorBaseConstructor` | Clase que hereda de `I18nErrorBase`. Las que no heredan producen un error de tipo. |
| `message` | `string \| (meta) => string` | Mensaje a registrar. El tipo de `meta` se infiere de la clase objetivo. |
| `lang` | `string \| Iterable<string>` | Idioma objetivo. Un único código o un iterable (como un arreglo). |

Volver a registrar la misma clase e idioma sobrescribe.

## Tipos [#types]

### `ErrorMeta` [#error-meta]

```ts
type ErrorMeta = {
  readonly [prop: string]: unknown;
};
```

Restricción predeterminada de `TMeta`. Objeto de solo lectura con propiedades arbitrarias.

### `ErrorOptions` [#error-options]

```ts
type ErrorOptions =
  ConstructorParameters<typeof Error> extends [
    message?: unknown,
    options?: (infer TOptions) | undefined,
  ]
    ? TOptions
    : { readonly cause?: unknown };
```

Tipo derivado del segundo argumento de `Error`. Permite pasar `cause`.

### `MessageFactory<TMeta>` [#message-factory]

```ts
interface MessageFactory<TMeta extends ErrorMeta | undefined = ErrorMeta | undefined> {
  (meta: TMeta): string;
}
```

Función que genera un mensaje a partir de `meta`. Se usa tanto para el predeterminado como para los registrados.

### `I18nErrorBaseParams<TMeta>` [#i18n-error-base-params]

Sobrecargas de argumentos del constructor.

```ts
type I18nErrorBaseParams<TMeta extends ErrorMeta | undefined = ErrorMeta | undefined> =
  [TMeta] extends [undefined]
    ?
        | [message: string | MessageFactory<TMeta>, options?: ErrorOptions | undefined]
        | [meta: undefined, message: string | MessageFactory<TMeta>, options?: ErrorOptions | undefined]
    : [meta: TMeta, message: string | MessageFactory<TMeta>, options?: ErrorOptions | undefined];
```

La forma abreviada sin `meta` solo se permite cuando `TMeta` es `undefined`.

### `I18nErrorBaseConstructor` [#i18n-error-base-constructor]

```ts
interface I18nErrorBaseConstructor {
  new (...args: any): I18nErrorBase;
}
```

Tipo del primer argumento de `setErrorMessage`.

## Notas [#notes]

- El valor predeterminado de `lang` es `"en"`. Cámbielo con `setGlobalConfig({ lang })`.
- No hay normalización de códigos ni cadena de reserva (p. ej.: `en-US` → `en`). Los idiomas no registrados usan el mensaje predeterminado.
