TypeScriptで「Cannot find name 'BN'」エラー

SolanaのAnchorでTypeScriptを書いていた時に発生したエラー。

現象

VSCodeで「let n = new BN(1)」の箇所で以下のエラーが発生する。

Cannot find name 'BN'.ts

念のため、「anchor test」も実行したが以下のエラー。

ReferenceError: BN is not defined

さらに、「new anchor.BN()」を記載しても同様のエラー。

原因

BNがインストールされていないため。

ただし、anchorがインストールされているのに「new anchor.BN()」がエラーになるのは不明。VSCode上もちゃんとサジェストしてくれているが、記述するとエラーになる。

対応

今回は手っ取り早く、 bn.js をインストールした。

% npm add bn.js
import BN from 'bn.js';

let n = new BN(1)

補足1

BNをインストールしたら、なぜか「new anchor.BN()」も利用できるようになった。

import * as anchor from "@project-serum/anchor";

let n = new anchor.BN(1)

補足2

今回試さなかったが、VSCodeの再起動だけで直る場合もあり。