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

עומסי ארגומנטי הקונסטרקטור.

```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`). שפות לא רשומות מקבלות את ברירת המחדל
