---
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` | Допоміжні дані з конструктора. Доступні для читання й запису. |
| `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` | Допоміжні дані для генерації повідомлень. |
| `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`). Незареєстровані мови дають повідомлення за замовчуванням
