---
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` | گزینه‌های سازگار با آرگومان دوم `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 };
```

نوعی برگرفته از آرگومان دوم `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]

overloadهای آرگومان سازنده.

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

نوع آرگومان اول `setErrorMessage` است.

## یادداشت‌ها [#notes]

- پیش‌فرض `lang` برابر `"en"` است. با `setGlobalConfig({ lang })` جابه‌جا کنید
- نرمال‌سازی کد زبان یا زنجیرهٔ fallback (مثل `en-US` به `en`) نیست. زبان‌های ثبت‌نشده پیام پیش‌فرض می‌شوند
