---
title: Referència de l'API
description: Especificació de I18nErrorBase, setErrorMessage i els tipus relacionats.
---

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

Classe base per heretar `Error`. `message` es resol segons `lang`.

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

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

### Paràmetres de tipus [#type-params]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `TMeta` | `ErrorMeta \| undefined` | `ErrorMeta \| undefined` | El tipus de `meta`. Especifiqueu `undefined` quan no la utilitzeu. |

### Propietats estàtiques [#static-props]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `prefix?` | `string` | `undefined` | Es concatena al principi del missatge resolt. |

### Propietats d'instància [#instance-props]

| Prop | Type | Description |
| ---- | ---- | ----------- |
| `meta` | `TMeta` | Informació auxiliar del constructor. Es pot llegir i escriure. |
| `message` | `string` | Es resol segons `lang`. És enumerable. |
| `cause` | `unknown` | La causa de `ErrorOptions`. És una propietat estàndard de `Error`. |

### Constructor [#constructor]

Quan `TMeta` no inclou `undefined`, `meta` és obligatori.

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

Quan `TMeta` és `undefined`, `meta` es pot ometre.

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

| Paràmetre | Tipus | Descripció |
| ------------ | -- | ---- |
| `meta` | `TMeta` | Informació auxiliar per generar el missatge. |
| `message` | `string \| MessageFactory<TMeta>` | Missatge per defecte per als idiomes sense registre. Les funcions reben `meta`. |
| `options` | `ErrorOptions` | Opcions compatibles amb el segon argument de `Error` (com `{ cause }`). |

### Ordre de resolució [#resolution-order]

1. Obté `lang` de `getGlobalConfig()` (`"en"` quan no està configurat)
2. Executa amb `meta` la funció registrada per a aquella classe i aquell idioma
3. Si no està registrat, utilitza el missatge per defecte
4. Si `static prefix` està configurat, el concatena al principi

:::note
Els registres són per classe. Els registres del pare no s'hereten. Registreu cada classe.
:::

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

Registra funcions de creació de missatges per idioma.

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

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

| Paràmetre | Tipus | Descripció |
| ------------ | -- | ----------- |
| `reference` | `I18nErrorBaseConstructor` | Una classe que hereta `I18nErrorBase`. Les classes que no l'hereten provoquen un error de tipus. |
| `message` | `string \| (meta) => string` | El missatge a registrar. `meta` s'infereix des de la classe de destinació. |
| `lang` | `string \| Iterable<string>` | L'idioma de destinació. Un sol codi o un objecte iterable (com una matriu). |

El nou registre de la mateixa classe i idioma sobreescriu.

## Tipus [#types]

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

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

La restricció per defecte de `TMeta`. Un objecte de només lectura amb propietats arbitràries.

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

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

Un tipus derivat del segon argument de `Error`. Podeu passar `cause`.

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

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

Una funció que genera un missatge des de `meta`. S'utilitza tant per al missatge per defecte com per als registrats.

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

Sobrecàrregues dels arguments 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];
```

Només ometeu `meta` quan `TMeta` és `undefined`.

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

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

El tipus del primer argument de `setErrorMessage`.

## Notes [#notes]

- El `lang` per defecte és `"en"`. Canvieu-lo explícitament amb `setGlobalConfig({ lang })`
- No hi ha normalització de codis d'idioma ni cadena de reserva (p. ex. `en-US` a `en`). Els idiomes sense registre utilitzen el missatge per defecte
