---
title: Référence API
description: Spécifications de I18nErrorBase, setErrorMessage et des types associés.
---

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

Classe de base pour hériter de `Error`. `message` est résolu selon `lang`.

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

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

### Paramètres de type [#type-params]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `TMeta` | `ErrorMeta \| undefined` | `ErrorMeta \| undefined` | Le type de `meta`. Spécifiez `undefined` si vous ne l'utilisez pas. |

### Propriétés statiques [#static-props]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `prefix?` | `string` | `undefined` | Ajouté au début du message résolu. |

### Propriétés d'instance [#instance-props]

| Prop | Type | Description |
| ---- | ---- | ----------- |
| `meta` | `TMeta` | Informations annexes du constructeur. Lisibles et inscriptibles. |
| `message` | `string` | Résolu selon `lang`. Énumérable. |
| `cause` | `unknown` | Cause passée via `ErrorOptions`. Propriété standard de `Error`. |

### Constructeur [#constructor]

Quand `TMeta` n'inclut pas `undefined`, `meta` est requis.

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

Quand `TMeta` vaut `undefined`, `meta` peut être omis.

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

| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `meta` | `TMeta` | Informations annexes pour générer les messages. |
| `message` | `string \| MessageFactory<TMeta>` | Message par défaut pour les langues sans enregistrement. Les fonctions reçoivent `meta`. |
| `options` | `ErrorOptions` | Options compatibles avec le 2e argument de `Error` (comme `{ cause }`). |

### Ordre de résolution [#resolution-order]

1. Obtient `lang` depuis `getGlobalConfig()` (`"en"` si non défini).
2. Exécute avec `meta` la fonction enregistrée pour cette classe et cette langue.
3. Si non enregistré, utilise le message par défaut.
4. Si `static prefix` est défini, l'ajoute au début.

:::note
Les enregistrements sont par classe. Ceux du parent ne sont pas hérités. Enregistrez chaque classe.
:::

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

Enregistre des fonctions de création de message par langue.

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

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

| Paramètre | Type | Description |
| --------- | ---- | ----------- |
| `reference` | `I18nErrorBaseConstructor` | Classe héritant de `I18nErrorBase`. Les classes qui n'en héritent pas provoquent une erreur de type. |
| `message` | `string \| (meta) => string` | Message à enregistrer. Le type de `meta` est inféré depuis la classe cible. |
| `lang` | `string \| Iterable<string>` | Langue cible. Un seul code ou un itérable (comme un tableau). |

La réinscription d'une même classe et langue écrase l'entrée.

## Types [#types]

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

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

Contrainte par défaut de `TMeta`. Un objet en lecture seule aux propriétés arbitraires.

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

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

Type dérivé du 2e argument de `Error`. Vous pouvez passer `cause`.

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

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

Fonction générant un message depuis `meta`. Utilisée pour les messages par défaut comme enregistrés.

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

Surcharges d'arguments du constructeur.

```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 forme abrégée sans `meta` n'est autorisée que quand `TMeta` vaut `undefined`.

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

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

Type du 1er argument de `setErrorMessage`.

## Notes [#notes]

- La valeur par défaut de `lang` est `"en"`. Basculez-la avec `setGlobalConfig({ lang })`.
- Ni normalisation des codes de langue ni chaîne de repli (p. ex. `en-US` → `en`). Les langues non enregistrées donnent le message par défaut.
