Запуск сценариев TypeScript с помощью ts-node

TypeScript становится все популярнее, поскольку он является расширенным набором JavaScript и позволяет компилировать ваши файлы TypeScript в чистый JavaScript до того, как движок V8 сможет их понять. Также вы можете следить за изменениями файлов и автоматизировать компиляцию. Но иногда все эти функции не нужны – например, если вы просто хотите запустить свой скрипт и получить результаты. Здесь на помощь приходит ts-node, который позволяет с легкостью выполнять сценарии TypeScript.

Требования

  • Последняя версия Node, установленная на вашем компьютере. Вы можете сделать это, следуя мануалу для вашего дистрибутива: Mac OSUbuntuCentOSDebian.
  • Базовое знакомство с npm. Чтобы узнать больше о работе с этим инструментом, прочтите руководство Управление модулями Node.js с помощью npm и package.json.
  • Навыки работы с TypeScript. Если не знаете, с чего начать, прочитайте статью Как создать новый проект TypeScript.

1: Начало работы

Для начала нужно установить typescript и ts-node:

npm install typescript ts-node

Поскольку ts-node — это исполняемый файл, который можно запускать, вам не нужно ничего импортировать в ваши сценарии или добавлять в требования.

Если у вас еще нет проекта TypeScript, на котором вы могли бы потренироваться, вы можете просто использовать этот скрипт 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)}`);

Приведенный выше скрипт извлекает случайные значения из массива и возвращает два списка данных: в одном из них могут быть повторы, во втором – нет. Опять же, вы можете использовать любой другой скрипт, если хотите.

Убедитесь, что ваш скрипт возвращает значение и выводит что-то в консоль. Теперь, когда ваш сценарий TypeScript готов, вы можете перейти к его запуску.

2: Запуск скриптов

Прежде чем приступить к работе с ts-node, давайте посмотрим, что происходит, когда вы запускаете сценарий TypeScript с помощью Node.

Запустите скрипт reptile.ts (или другой скрипт TypeScript) с помощью команды node:

node reptile.ts

После выполнения этой команды вы увидите сообщение об ошибке:

SyntaxError: Unexpected identifier

Сообщение SyntaxError указывает на переменную закрытого класса во второй строке reptile.ts.

Итак, использование Node для запуска скриптов TypeScript возвращает ошибку. Теперь, когда вы знаете, чего не следует делать и чего ожидать от Node, пора попробовать ts-node.

Используйте ts-node для запуска скрипта reptile.ts:

npx ts-node reptile.ts

Команда npx – это инструмент, который теперь поставляется с npm и позволяет запускать локальные для проекта двоичные файлы из командной строки.

Вы увидите такой вывод при запуске этого скрипта:

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.ts через ts-node вернет два списка данных. Как видите, команда ts-node эффективно запускает сценарии TypeScript. Но есть способ сделать это еще быстрее.

3: Оптимизация ts-node

ts-node работает так: он берет ваш скрипт, выполняет базовую семантическую проверку, чтобы убедиться, что код не содержит ошибок, а затем компилирует TypeScript в JavaScript.

Это самый безопасный вариант. Но если вас не беспокоят ошибки, вы можете передать флаг -T или –transpileOnly. Тогда ts-node будет выполнять транспиляцию в JavaScript без проверки ошибок в коде TypeScript.

Хотя использовать этот флаг не всегда безопасно, есть сценарии, в которых это имеет смысл. Если вы пытаетесь запустить чужой скрипт или уверены, что ваш редактор и линтер перехватывают все ошибки, спокойно используйте флаг -T.

npx ts-node -T reptile.ts

Запуск этой команды даст вам тот же результат, что и этой:

npx ts-node reptile.ts

Но ts-node способен на большее – эта команда также предлагает поддержку TypeScript REPL.

4: Как работает TypeScript REPL

Еще одним дополнительным преимуществом ts-node является возможность использовать TypeScript REPL (read-evaluate-print loop), что работает аналогично команде node без каких-либо параметров.

Этот TypeScript REPL позволяет писать TypeScript прямо в командной строке, что очень удобно для быстрого тестирования чего-либо.

Чтобы получить доступ к TypeScript REPL, запустите ts-node без аргументов:

npx ts-node

Теперь вы можете наслаждаться всеми преимуществами TypeScript прямо в своем любимом терминале.

Заключение

В этой статье вы узнали, что такое ts-node и как использовать его для запуска сценариев TypeScript. Также вы научились использовать TypeScript REPL с помощью ts-node.

Читайте также: Использование TypeScript в Visual Studio Code

Tags: , ,

Добавить комментарий