ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

typescript 4.5 betaでes modulesを試す

node.jsでes modulesがサポートされた時にやってみようと思ったがtsmjsに変換する方法が無くて諦めたやつができるようになったっぽいので試してみた。

devblogs.microsoft.com

一応試したコードはgithubに上げてある。

github.com

インストールと設定

beta版(4.5.0-beta)をインストールする

yarn add typescript@beta

tsconfigを作成し、module設定を変更する

yarn tsc --init

commonjses2022

{
    "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