みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

2024年現在の TypeScript の設定

ESM な TypeScript を node.js で実行するときの設定を検討します.なお,ESM とは以下のように import を使う方式のことです.

import { valueOfPi } from "./constants";
export const twoPi = valueOfPi * 2;

https://www.typescriptlang.org/ja/tsconfig#module

環境

% sw_vers
ProductName:            macOS
ProductVersion:         13.6.3
% node -v
v20.11.0

package.json

ESM を利用するための設定をします.

{
    "type": "module",
    ....
}

https://nodejs.org/api/esm.html#enabling

tsconfig.json

{
    "$schema": "https://json.schemastore.org/tsconfig",
    "compilerOptions": {
        "lib": [
            "es2023"
        ],
        "module": "node16",
        "target": "es2022",
        "strict": true,
        "esModuleInterop": true,
        "skipLibCheck": true,
        "forceConsistentCasingInFileNames": true,
        "moduleResolution": "node16",
        "noEmit": true,
        "allowImportingTsExtensions": true
    },
    "include": [
        "src/**/*.ts"
    ]
}

昔はトランスパイルされるはずの js ファイルをインポートしていましたが,allowImportingTsExtensions を有効にすれば,直接 ts ファイルをインポートできるようになります.

https://www.typescriptlang.org/ja/tsconfig#allowImportingTsExtensions

サンプル

a.ts

export const func = (a: number) => a * 2;

b.ts

import { func } from "./a.ts";

console.log(func(2));

tsx で実行する

TypeScript Execute (tsx): Node.js enhanced to run TypeScript & ESM files

https://github.com/privatenumber/tsx

昔は ts-node を使っていましたが,こちらの方が高速で正式に ESM をサポートしていますので,乗り換えます.

まずはインストールします.

npm install --save-dev tsx

実行するには tsx コマンドを使います.

tsx b.ts

先程のサンプルを実行すると,正常に出力されました.

4

まとめ

TypeScript を ESM ですっきりと実行できるようになりました.