序章

TypeScriptの人気が高まっています。 TypeScriptはJavaScriptのスーパーセットであり、それを使用するということは、V8エンジンが理解する前にTypeScriptファイルを純粋なJavaScriptにコンパイルすることを意味します。 ファイルの変更を監視し、コンパイルを自動化できます。 ただし、スクリプトを実行して結果を取得したい場合もあります。 これがts-nodeの出番です。 ts-nodeを使用すると、大騒ぎをスキップして、TypeScriptスクリプトを簡単に実行できます。

前提条件

このチュートリアルを正常に完了するには、次のものが必要です。

ステップ1—はじめに

開始するには、typescriptts-nodeをインストールする必要があります。

  1. npm install typescript ts-node

ts-nodeは実行可能な実行可能ファイルであるため、スクリプトにはimportまたはrequireは何もありません。

使用するTypeScriptプロジェクトがまだない場合は、次のスクリプトを使用してts-nodeをテストできます。

スクリプト:reptile.ts
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スクリプト)を実行します。

  1. node reptile.ts

このコマンドを実行すると、次のエラーメッセージが表示されます。

Output
SyntaxError: Unexpected identifier

SyntaxError: Unexpected identifierメッセージは、reptile.tsの2行目のプライベートクラス変数を具体的に示しています。

Nodeを使用してTypeScriptスクリプトを実行すると、エラーが返されます。 これで、何をすべきでないか、そしてそれを行うときに何を期待するかがわかりました。 これがts-nodeの出番です。

ts-nodeを使用して、reptile.tsスクリプトを実行します。

  1. npx ts-node reptile.ts

npxコマンドについて詳しく知りたい場合は、コマンドラインからプロジェクトにローカルなバイナリを実行できるnpmが付属しているツールです。

このスクリプトを実行すると、次の出力が表示されます。

Output
With 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.tsts-nodeと一緒に実行すると、爬虫類のタイプの2つのリストが返されます。1つは重複している可能性があり、もう1つは重複していない可能性があります。 ts-nodeコマンドは、TypeScriptスクリプトを効率的に実行します。 しかし、それをさらに速くする方法があります。

ステップ3—スピードアップ

内部的には、ts-nodeはスクリプトを取得し、コードにエラーがないことを確認するためにセマンティックチェックを実行してから、TypeScriptをJavaScriptにコンパイルします。

これが最も安全なオプションです。 ただし、TypeScriptエラーについて心配していない場合は、-Tまたは--transpileOnlyフラグを渡すことができます。 このフラグは、TypeScriptエラーをチェックせずにJavaScriptにトランスパイルするようにts-nodeに指示します。

このフラグを使用することが常に推奨されるわけではありませんが、それが理にかなっているシナリオがあります。 他の人のスクリプトを実行しようとしている場合、またはエディターとリンターがすべてをキャッチしていると確信している場合は、-Tまたは--transpileOnlyフラグを使用するのが適切です。

  1. 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を実行します。

  1. npx ts-node

そして今、あなたはTypeScriptが提供しなければならないすべての厳格さをあなたのお気に入りの端末で楽しむことができます!

結論

この記事では、ts-nodeを使用してTypeScriptスクリプトを実行しました。 ts-nodeでTypeScriptREPLも使用しました。

TypeScriptをさらに活用することに興味がある場合は、この VisualStudioCodeでTypeScriptを操作する方法の記事が役立つ場合があります。