typescript 4.5 betaでes modulesを試す
node.jsでes modulesがサポートされた時にやってみようと思ったがts
→mjs
に変換する方法が無くて諦めたやつができるようになったっぽいので試してみた。
一応試したコードはgithubに上げてある。
インストールと設定
beta版(4.5.0-beta)をインストールする
yarn add typescript@beta
tsconfigを作成し、module設定を変更する
yarn tsc --init
commonjs
をes2022
に
{ "compilerOptions": { "module": "es2022", } }
雑なtypescriptのコードを用意する。ts4.5では .mts
という拡張子が使える様になっている。.mts
をコンパイルすると.mjs
とes moduleを使う指定になってnode.jsが実行してくれる。
// add.mts export const add = (x: number, y: number) => x + y // index.mts import { add } from "./add.mjs"; // ここがm"js"なことに注意 console.log(add(1,2))
これでtscして実行してみる
yarn tsc -P . && node src/index.mjs
ちなみに
.mts
のような拡張子を使わず、既存の.ts
でcommonjsではなくes moduleとして実行することもできることができる。*1
type in package.json and New Extensions
実際にやってみた。ソースコードは前とほぼ同じだけど、ファイルの拡張子が違う。
// add.ts export const add = (x: number, y: number) => x + y // index.ts import { add } from "./add.js"; console.log(add(1,2))
package.jsonに以下を書き加える。設定を書くとnode.jsが.js
をes moduleとして実行する。
{ "type": "module" }
yarn tsc -P . && node src/index.js
*1:node.js v12で入った機能ですが https://nodejs.org/api/packages.html#packages_type