📝
ethersのContractにJsonRPCProvider食わせたら怒られる
環境
- ethers@5.4.4
- @ethersproject/providers@5.5.0
- typescript@4.4.4
再現コード
import { Contract } from 'ethers';
import { JsonRpcProvider } from '@ethersproject/providers';
const abi = [];
const provider = new JsonRpcProvider('');
const contract = new Contract('', abi, provider);
// Argument of type 'JsonRpcProvider' is not assignable to parameter of type 'Provider | Signer | undefined'.
// Type 'JsonRpcProvider' is not assignable to type 'Provider'.
// The types returned by 'resolveName(...)' are incompatible between these types.
// Type 'Promise<string | null>' is not assignable to type 'Promise<string>'.
// Type 'string | null' is not assignable to type 'string'.
// Type 'null' is not assignable to type 'string'.ts(2345)
原因
ethersのバージョンミスマッチだと思われる。
eslintに @ethersproject/providers
をimportしてるのにdependenciesに追加されてないと言われて、雑に入れたらprovidersだけ最新バージョンが入って、元のethersはちょい古いバージョン使ってたので発生した。
解決方法
ethers@5.5.1
にアップデートしてバージョンを一致させた。
Discussion