Запуск сценариев TypeScript с помощью ts-node
Development, Java | Комментировать запись
TypeScript становится все популярнее, поскольку он является расширенным набором JavaScript и позволяет компилировать ваши файлы TypeScript в чистый JavaScript до того, как движок V8 сможет их понять. Также вы можете следить за изменениями файлов и автоматизировать компиляцию. Но иногда все эти функции не нужны – например, если вы просто хотите запустить свой скрипт и получить результаты. Здесь на помощь приходит ts-node, который позволяет с легкостью выполнять сценарии TypeScript.
Требования
- Последняя версия Node, установленная на вашем компьютере. Вы можете сделать это, следуя мануалу для вашего дистрибутива: Mac OS, Ubuntu, CentOS, Debian.
- Базовое знакомство с 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: Javascript, REPL, TypeScript