TypeScriptでプロジェクトを開発していると、時折「BigInt literals are not available when targeting lower than ES2020」というエラーに遭遇することがあります。このエラーは、BigInt型を使用しようとしているにもかかわらず、プロジェクトの設定がES2020より古いバージョンを対象としている場合に発生します。本記事では、このエラーの原因と解決方法について詳しく解説します。

エラーの原因

このエラーが発生する主な理由は、TypeScriptの設定ファイル(tsconfig.json)で指定されているターゲットのJavaScriptバージョンがES2020未満に設定されているためです。BigInt型はES2020で導入された比較的新しい機能であり、それ以前のバージョンではサポートされていません。

解決方法

1. tsconfig.jsonの修正

最も簡単な解決方法は、プロジェクトのtsconfig.jsonファイルを開き、"target"オプションをES2020以上に設定することです。

{
  "compilerOptions": {
    "target": "ES2020",
    // その他のオプション...
  }
}

2. BigIntの代替表現の使用

プロジェクトの要件上、ES2020未満のバージョンを使用する必要がある場合は、BigIntリテラルの代わりに`BigInt()`関数を使用することで問題を回避できます。

// エラーが発生する書き方
const bigNumber = 1234567890123456789012345678901234567890n;

// 代替の書き方
const bigNumber = BigInt("1234567890123456789012345678901234567890");

3. @ts-ignoreコメントの使用

一時的な対応策として、該当行の直前に`// @ts-ignore`コメントを追加することで、TypeScriptコンパイラにエラーを無視させることができます。ただし、この方法は推奨されません。

// @ts-ignore
const bigNumber = 1234567890123456789012345678901234567890n;

4. lib.es2020.bigint.d.tsの追加

TypeScriptの設定で`lib`オプションを使用している場合、`"ES2020.BigInt"`を追加することで、BigInt関連の型定義を明示的に含めることができます。

{
  "compilerOptions": {
    "lib": ["ES2019", "ES2020.BigInt"]
    // その他のオプション...
  }
}

まとめ

「BigInt literals are not available when targeting lower than ES2020」エラーは、主にTypeScriptプロジェクトの設定とBigInt型の互換性の問題から発生します。最も推奨される解決策は、tsconfig.jsonのtargetオプションをES2020以上に設定することですが、プロジェクトの要件に応じて他の方法も検討できます。

適切な解決方法を選択することで、BigInt型を問題なく使用し、大きな整数値を扱う必要のあるアプリケーションを効果的に開発することができます。TypeScriptの設定を最新のJavaScript仕様に合わせることで、より強力な機能と型安全性を享受できるでしょう。