Cannot use import statement outside a moduleエラー

凡ミスすぎるため、あまり発生しないレアケースと思われるが念のためメモ。

現象

あるプログラムをnodeで実行したところ、Cannot use import statement outside a moduleエラーが出力。

% node index.ts
(node:91334) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/Users/user/Desktop/blockchain/francium-sdk-master/src/index.ts:1
import { FranciumSDK } from './main';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at Object.compileFunction (node:vm:352:18)
    at wrapSafe (node:internal/modules/cjs/loader:1031:15)
    at Module._compile (node:internal/modules/cjs/loader:1065:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47

原因

TypeScriptファイルなのにnodeで実行していた。TypeScriptとJavaScriptで挙動が変わるため、無理やりnode実行しておかしくなっていた。

対応

TypeScriptで実行する。
以下を参考にts-node実行できるようにする。

ts-nodeでTypeScriptのコードを直接実行 & デバッグ

エラーになっていたファイルを再実行して完了。

% ts-node index.ts