きっかけ
https://qiita.com/hirokidaichi/items/27c757d92b6915e8ecf7#%E7%BF%92%E6%85%A3%E3%81%AE%E5%8A%9B
この記事を読んでTypeScriptをVsCode上で実行することに興味を持ちました。
普段Chrome拡張機能の開発を行っているのですが、ビルド→拡張機能再読み込み、Webサイト再読み込み→開発者ツールでブレークポイント設定→値を確認という開発サイクルをとっており、効率の向上ができると思いました。
調査
vscode上でTSファイルを実行するために、ts-node
かtsc
というコマンドをインストールする必要があることを知りました。
ts-node
は直接TSファイルの実行ができます。
ts-node index.ts
index.tsの中身のconsole.logが実行されたことを確認できました。
tsc
はTSファイルをJSファイルにコンパイルします。
tsc index.ts
index.jsが生成されることを確認できました。
node index.js
console.logが実行されたことを確認できました。
疑問
試しにnode index.ts
をしてみました。
node上ではTSファイルの実行ができないはずなので、エラーを確認したかったです。
しかし、index.tsの中身のconsole.logが実行されました。
確認したこと
・env | grep NODE
環境変数を見てもnode でts-nodeを参照しているわけではないです。
・package.jsonも確認しましたが、npm init -yしてから何もインストールしていないので初期状態です。
{
"name": "20250208_node",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
・npm list -g
グローバルインストールもしてないです。
/Users/hogehoge/.nvm/versions/node/v16.20.2/lib
├── corepack@0.17.0
└── npm@8.19.4
解決
・TypeScriptの機能を使ったコードを書いてみる
// index.ts
interface User {
name: string;
age: number;
}
const user: User = {
name: "Test",
age: 20
};
console.log(user);
失敗しました。これが原因のようです。
node index.tsとしても書かれているコードが純粋なJSとして解釈できるものだったら実行されるようです。
識別子とは関係なく、ファイルの中身を JavaScript として解釈しようとすることがわかり勉強になりました。