---
title: API справка
description: Спецификации за I18nErrorBase, setErrorMessage и свързаните типове.
---

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

Базов клас за разширяване на `Error`. `message` се разрешава според `lang`.

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

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

### Типови параметри [#type-params]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `TMeta` | `ErrorMeta \| undefined` | `ErrorMeta \| undefined` | Типът на `meta`. Задайте `undefined`, когато не се използва. |

### Статични свойства [#static-props]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `prefix?` | `string` | `undefined` | Добавя се в началото на разрешеното съобщение. |

### Свойства на инстанцията [#instance-props]

| Prop | Type | Description |
| ---- | ---- | ----------- |
| `meta` | `TMeta` | Помощна info от конструктора. Достъпна за четене и писане. |
| `message` | `string` | Съобщението, разрешено според `lang`. Изброимо. |
| `cause` | `unknown` | Причината от `ErrorOptions`. Стандартно свойство на `Error`. |

### Конструктор [#constructor]

Когато `TMeta` изключва `undefined`, `meta` е задължително.

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

Когато `TMeta` е `undefined`, `meta` може да се пропусне.

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

| Параметър | Тип | Описание |
| ------------ | -- | ---- |
| `meta` | `TMeta` | Помощна info за генериране на съобщения. |
| `message` | `string \| MessageFactory<TMeta>` | Съобщение по подразбиране за езици без регистрация. Когато е функция, получава `meta`. |
| `options` | `ErrorOptions` | Опции, съвместими с 2. аргумент на `Error` (например `{ cause }`). |

### Ред на разрешаване [#resolution-order]

1. Взема `lang` от `getGlobalConfig()` (`"en"` когато не е зададен)
2. Изпълнява регистрираната функция за този клас и език с `meta`
3. Когато няма регистрация, използва съобщението по подразбиране
4. Ако е зададен `static prefix`, го добавя в началото

:::note
Регистрациите са по клас. Родителските не се наследяват. Регистрирайте всеки клас.
:::

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

Регистрира фабрична функция за съобщения за всеки език.

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

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

| Параметър | Тип | Описание |
| ------------ | -- | ---- |
| `reference` | `I18nErrorBaseConstructor` | Клас, наследяващ `I18nErrorBase`. Другите са типова грешка. |
| `message` | `string \| (meta) => string` | Съобщението за регистриране. `meta` се извежда от целевия клас. |
| `lang` | `string \| Iterable<string>` | Целевият език. Единичен код или итерируем обект (например масив). |

Повторното регистриране на същия клас и език презаписва.

## Типове [#types]

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

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

Ограничението по подразбиране за `TMeta`. Обект само за четене с произволни свойства.

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

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

Тип, изведен от 2. аргумент на `Error`. Може да се подаде `cause`.

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

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

Функция, която създава съобщение от `meta`. Използва се и за зададени, и за регистрирани съобщения.

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

Претоварвания на аргументите на конструктора.

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

Формата без `meta` е допустима само когато `TMeta` е `undefined`.

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

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

Типът на 1. аргумент на `setErrorMessage`.

## Забележки [#notes]

- `lang` по подразбиране е `"en"`. Превключете с `setGlobalConfig({ lang })`
- Няма нормализация на кодовете и няма верига за резервен вариант (напр. `en-US` → `en`). Нерегистрираните езици дават съобщението по подразбиране
