---
title: API-viite
description: I18nErrorBase-, setErrorMessage- ja niihin liittyvien tyyppien määritykset.
---

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

`Error`-luokan periyttämiseen tarkoitettu perusluokka. `message` ratkaistaan `lang`-arvon mukaisesti.

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

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

### Tyyppiparametrit [#type-params]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `TMeta` | `ErrorMeta \| undefined` | `ErrorMeta \| undefined` | `meta`-ominaisuuden tyyppi. Jos sitä ei käytetä, anna `undefined`. |

### Staattiset ominaisuudet [#static-props]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `prefix?` | `string` | `undefined` | Liitetään ratkaistun viestin alkuun. |

### Instanssiominaisuudet [#instance-props]

| Prop | Type | Description |
| ---- | ---- | ----------- |
| `meta` | `TMeta` | Rakentajan liitännäistiedot. Luettavissa ja kirjoitettavissa. |
| `message` | `string` | Ratkaistaan `lang`-arvon mukaisesti. Lueteltavissa. |
| `cause` | `unknown` | `ErrorOptions`-valinnalla annettu syy. `Error`-luokan vakiominaisuus. |

### Rakentaja [#constructor]

Jos `TMeta` ei sisällä `undefined`-arvoa, `meta` on pakollinen.

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

Jos `TMeta` on `undefined`, `meta` voidaan jättää pois.

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

| Parametri | Tyyppi | Kuvaus |
| --------- | ------ | ------ |
| `meta` | `TMeta` | Viestin luomisen liitännäistiedot. |
| `message` | `string \| MessageFactory<TMeta>` | Oletusviesti rekisteröimättömille kielille. Funktio vastaanottaa `meta`-arvon. |
| `options` | `ErrorOptions` | `Error`-luokan toisen argumentin kanssa yhteensopivat valinnat (esim. `{ cause }`). |

### Selvitysjärjestys [#resolution-order]

1. Hakee `lang`-arvon `getGlobalConfig()`-funktiolla (`"en"`, jos asetusta ei ole)
2. Suorittaa kyseisen luokan ja kielen rekisteröidyn funktion `meta`-arvolla
3. Jos rekisteröintiä ei ole, käyttää oletusviestiä
4. Jos `static prefix` on asetettu, liittää sen alkuun

:::note
Rekisteröinnit ovat luokkakohtaisia. Yliluokan rekisteröinnit eivät periydy. Rekisteröi jokainen luokka.
:::

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

Rekisteröi kielikohtaiset viestin luontifunktiot.

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

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

| Parametri | Tyyppi | Kuvaus |
| --------- | ------ | ------ |
| `reference` | `I18nErrorBaseConstructor` | `I18nErrorBase`-luokasta peritty luokka. Perimättömät luokat aiheuttavat tyyppivirheen. |
| `message` | `string \| (meta) => string` | Rekisteröitävä viesti. `meta`-tyyppi päätellään kohdeluokasta. |
| `lang` | `string \| Iterable<string>` | Kohdekieli. Yksittäinen koodi tai iteroitava kokoelma (esim. taulukko). |

Saman luokan ja kielen uudelleenrekisteröinti korvaa.

## Tyypit [#types]

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

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

`TMeta`-tyypin oletusrajoite. Vain luettava objekti, jolla on mielivaltaisia ominaisuuksia.

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

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

`Error`-luokan toisesta argumentista johdettu tyyppi. Sillä voidaan antaa `cause`.

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

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

Funktio, joka luo viestin `meta`-arvosta. Käytetään sekä oletus- että rekisteröidyissä viesteissä.

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

Rakentajan argumenttien ylikuormitukset.

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

Vain kun `TMeta` on `undefined`, `meta` voidaan jättää pois.

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

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

`setErrorMessage`-funktion ensimmäisen argumentin tyyppi.

## Lisätiedot [#notes]

- `lang`-arvon oletus on `"en"`. Vaihda se erikseen `setGlobalConfig({ lang })` -funktiolla
- Kielikoodien normalisointia tai varaketjua (esim. `en-US` → `en`) ei ole. Rekisteröimättömät kielet käyttävät oletusviestiä
