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

`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` 第 2 引数と互換のオプション（`{ cause }` など）です。 |

### 解決順序 [#resolution-order]

1. `getGlobalConfig()` の `lang` を取得します（未設定は `"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` 第 2 引数から導出した型です。`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];
```

`undefined` のときだけ `meta` を省略できます。

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

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

`setErrorMessage` 第 1 引数の型です。

## 補足 [#notes]

- `lang` の既定は `"en"` です。`setGlobalConfig({ lang })` で切り替えてください。
- 言語コードの正規化やフォールバックチェーン（例: `en-US` → `en`）はありません。未登録言語は既定メッセージです。
