---
title: API-referentie
description: De specificatie van I18nErrorBase, setErrorMessage en de bijbehorende typen.
---

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

De basisklasse om `Error` te overerven. `message` wordt opgelost volgens `lang`.

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

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

### Typeparameters [#type-params]

| Prop | Type | Default | Beschrijving |
| ---- | ---- | ------- | ------------ |
| `TMeta` | `ErrorMeta \| undefined` | `ErrorMeta \| undefined` | Het type van `meta`. Geef `undefined` op als je deze niet gebruikt. |

### Statische properties [#static-props]

| Prop | Type | Default | Beschrijving |
| ---- | ---- | ------- | ------------ |
| `prefix?` | `string` | `undefined` | Wordt vooraan het opgeloste bericht geplaatst. |

### Instantieproperties [#instance-props]

| Prop | Type | Beschrijving |
| ---- | ---- | ------------ |
| `meta` | `TMeta` | Aanvullende info uit de constructor. Leesbaar en schrijfbaar. |
| `message` | `string` | Wordt opgelost volgens `lang`. Enumerable. |
| `cause` | `unknown` | De oorzaak uit `ErrorOptions`. Een standaardproperty van `Error`. |

### Constructor [#constructor]

Als `TMeta` geen `undefined` bevat, is `meta` verplicht.

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

Als `TMeta` `undefined` is, kun je `meta` weglaten.

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

| Parameter | Type | Beschrijving |
| --------- | ---- | ------------ |
| `meta` | `TMeta` | Aanvullende info voor het genereren van berichten. |
| `message` | `string \| MessageFactory<TMeta>` | Het standaardbericht voor talen zonder registratie. Functies ontvangen `meta`. |
| `options` | `ErrorOptions` | Opties compatibel met het tweede argument van `Error` (zoals `{ cause }`). |

### Oplossingsvolgorde [#resolution-order]

1. Haalt `lang` op uit `getGlobalConfig()` (`"en"` indien niet ingesteld)
2. Voert de geregistreerde functie voor die klasse en taal uit met `meta`
3. Indien niet geregistreerd, wordt het standaardbericht gebruikt
4. Indien `static prefix` is ingesteld, wordt deze vooraan geplaatst

:::note
Registraties zijn per klasse. Registraties op een bovenliggende klasse worden niet overgeërfd. Registreer elke klasse afzonderlijk.
:::

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

Registreert berichtgenererende functies per taal.

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

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

| Parameter | Type | Beschrijving |
| --------- | ---- | ------------ |
| `reference` | `I18nErrorBaseConstructor` | Een klasse die `I18nErrorBase` overerft. Klassen zonder overerving geven een typefout. |
| `message` | `string \| (meta) => string` | Het te registreren bericht. Het type van `meta` wordt afgeleid van de doelklasse. |
| `lang` | `string \| Iterable<string>` | De doeltaal. Eén code of een itereerbaar object (zoals een array). |

Opnieuw registreren voor dezelfde klasse en taal overschrijft.

## Typen [#types]

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

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

De standaardbeperking voor `TMeta`. Een alleen-lezen object met willekeurige properties.

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

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

Een type afgeleid van het tweede argument van `Error`. Je kunt er `cause` in doorgeven.

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

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

Een functie die uit `meta` een bericht genereert. Voor zowel standaard- als geregistreerde berichten.

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

Overloads van constructorargumenten.

```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];
```

Alleen als `TMeta` `undefined` is, mag je `meta` weglaten.

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

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

Het type van het eerste argument van `setErrorMessage`.

## Aanvullingen [#notes]

- De standaardwaarde van `lang` is `"en"`. Schakel expliciet met `setGlobalConfig({ lang })`
- Geen normalisatie van taalcodes of fallbackketen (bijv. `en-US` naar `en`). Niet-geregistreerde talen krijgen het standaardbericht
