ts-nodeでTypeScriptスクリプトを実行する方法
序章
TypeScriptの人気が高まっています。 TypeScriptはJavaScriptのスーパーセットであり、それを使用するということは、V8エンジンが理解する前にTypeScriptファイルを純粋なJavaScriptにコンパイルすることを意味します。 ファイルの変更を監視し、コンパイルを自動化できます。 ただし、スクリプトを実行して結果を取得したい場合もあります。 これがts-nodeの出番です。 ts-node
を使用すると、大騒ぎをスキップして、TypeScriptスクリプトを簡単に実行できます。
前提条件
このチュートリアルを正常に完了するには、次のものが必要です。
- マシンにインストールされているNodeの最新バージョン。 これを実現するには、Node.jsをインストールしてローカル開発環境を作成する方法チュートリアルに従ってください。
npm
に精通していること。npm
の操作の詳細については、このnpmおよびpackage.jsonチュートリアルでNode.jsモジュールを使用する方法をお読みください。- TypeScriptに精通していること。 この新しいTypeScriptプロジェクトを設定する方法の記事は、始めるのに最適な場所です。
ステップ1—はじめに
開始するには、typescript
とts-node
をインストールする必要があります。
- npm install typescript ts-node
ts-node
は実行可能な実行可能ファイルであるため、スクリプトにはimport
またはrequire
は何もありません。
使用するTypeScriptプロジェクトがまだない場合は、次のスクリプトを使用してts-node
をテストできます。
class Reptile {
private reptiles: Array<string> = [
'Alligator',
'Crocodile',
'Chameleon',
'Komodo Dragon',
'Iguana',
'Salamander',
'Snake',
'Lizard',
'Python',
'Tortoise',
'Turtle',
];
shuffle(): void {
for (let i = this.reptiles.length - 1; i > 0; i--) {
let j: number = Math.floor(Math.random() * (i + 1));
let temp: string = this.reptiles[i];
this.reptiles[i] = this.reptiles[j];
this.reptiles[j] = temp;
}
}
random(count: number = 1, allowDupes?: boolean): Array<string> {
let selected: Array<string> = [];
if (!allowDupes && count > this.reptiles.length) {
throw new Error(`Can't ensure no dupes for that count`);
}
for (let i: number = 0; i < count; i++) {
if (allowDupes) {
// Dupes are cool, so let's just pull random reptiles
selected.push(this.reptiles[
Math.floor(Math.random() * this.reptiles.length)
]);
} else {
// Dupes are no go, shuffle the array and grab a few
this.shuffle();
selected = this.reptiles.slice(0, count);
}
}
return selected;
}
}
const reptile = new Reptile();
console.log(`With Dupes: ${reptile.random(10, true)}`);
console.log(`And Without: ${reptile.random(10)}`);
上記のスクリプトは、配列からランダムな値を取得し、異なるタイプの爬虫類の2つのリストを返します。1つは重複あり、もう1つは重複なしです。 繰り返しになりますが、必要に応じて独自のスクリプトを使用できます。
スクリプトが値を返し、コンソールに何かを出力することを確認してください。 コードの結果を確認する必要があります。 TypeScriptスクリプトを配置したら、スクリプトの実行に進むことができます。
ステップ2—スクリプトの実行
ts-node
を使用する前に、NodeでTypeScriptスクリプトを実行するとどうなるかを知っておくことをお勧めします。
node
コマンドを使用して、reptile.ts
スクリプト(または独自のTypeScriptスクリプト)を実行します。
- node reptile.ts
このコマンドを実行すると、次のエラーメッセージが表示されます。
OutputSyntaxError: Unexpected identifier
SyntaxError: Unexpected identifier
メッセージは、reptile.ts
の2行目のプライベートクラス変数を具体的に示しています。
Nodeを使用してTypeScriptスクリプトを実行すると、エラーが返されます。 これで、何をすべきでないか、そしてそれを行うときに何を期待するかがわかりました。 これがts-node
の出番です。
ts-node
を使用して、reptile.ts
スクリプトを実行します。
- npx ts-node reptile.ts
npxコマンドについて詳しく知りたい場合は、コマンドラインからプロジェクトにローカルなバイナリを実行できるnpmが付属しているツールです。
このスクリプトを実行すると、次の出力が表示されます。
OutputWith Dupes: Komodo Dragon,Python,Tortoise,Iguana,Turtle,Salamander,Python,Python,Salamander,Snake
And Without: Alligator,Iguana,Lizard,Snake,Tortoise,Chameleon,Crocodile,Komodo Dragon,Turtle,Salamander
reptile.ts
をts-node
と一緒に実行すると、爬虫類のタイプの2つのリストが返されます。1つは重複している可能性があり、もう1つは重複していない可能性があります。 ts-node
コマンドは、TypeScriptスクリプトを効率的に実行します。 しかし、それをさらに速くする方法があります。
ステップ3—スピードアップ
内部的には、ts-node
はスクリプトを取得し、コードにエラーがないことを確認するためにセマンティックチェックを実行してから、TypeScriptをJavaScriptにコンパイルします。
これが最も安全なオプションです。 ただし、TypeScriptエラーについて心配していない場合は、-T
または--transpileOnly
フラグを渡すことができます。 このフラグは、TypeScriptエラーをチェックせずにJavaScriptにトランスパイルするようにts-node
に指示します。
このフラグを使用することが常に推奨されるわけではありませんが、それが理にかなっているシナリオがあります。 他の人のスクリプトを実行しようとしている場合、またはエディターとリンターがすべてをキャッチしていると確信している場合は、-T
または--transpileOnly
フラグを使用するのが適切です。
- npx ts-node -T reptile.ts
このコマンドを実行すると、npx ts-node reptile.ts
と同じ出力が得られます。 ts-node
でできることはまだまだあります。 このコマンドは、TypeScriptREPLも提供します。
ステップ4—TypeScriptREPLを使用する
ts-node
に追加されたもう1つのボーナスは、オプションなしでnode
を実行するのと同様に、TypeScript REPL(読み取り-評価-印刷ループ)を使用できることです。
このTypeScriptREPLを使用すると、コマンドラインでTypeScriptを直接記述でき、何かをすばやくテストするのに非常に便利です。
TypeScript REPLにアクセスするには、引数なしでts-node
を実行します。
- npx ts-node
そして今、あなたはTypeScriptが提供しなければならないすべての厳格さをあなたのお気に入りの端末で楽しむことができます!
結論
この記事では、ts-node
を使用してTypeScriptスクリプトを実行しました。 ts-node
でTypeScriptREPLも使用しました。
TypeScriptをさらに活用することに興味がある場合は、この VisualStudioCodeでTypeScriptを操作する方法の記事が役立つ場合があります。