Node.js с TypeScript

Что такое TypeScript

TypeScript - это язык с открытым исходным кодом, поддерживаемый и разрабатываемый Microsoft. Его любят и используют многие разработчики программного обеспечения по всему миру.
По сути, это расширенная версия JavaScript, которая добавляет в язык новые возможности. Наиболее заметным дополнением являются определения статических типов, чего нет в простом JavaScript. Благодаря типам можно, например, объявить, какие аргументы мы ожидаем и что именно возвращается в наших функциях или какова точная форма объекта, который мы создаём. TypeScript - действительно мощный инструмент, открывающий новый мир возможностей в проектах JavaScript. Он делает наш код более безопасным и надёжным, предотвращая множество ошибок ещё до того, как код будет отправлен, он выявляет проблемы во время разработки кода и прекрасно интегрируется с редакторами кода, такими как Visual Studio Code.
О других преимуществах TypeScript мы поговорим позже, а сейчас давайте посмотрим несколько примеров!

Примеры

Взгляните на этот фрагмент кода, а затем мы его разберём:

type User = {
  name: string;
  age: number;
};

function isAdult(user: User): boolean {
  return user.age >= 18;
}

const justine: User = {
  name: 'Justine',
  age: 23,
};

const isJustineAnAdult: boolean = isAdult(justine);

Первая часть (с ключевым словом type) отвечает за объявление нашего пользовательского типа объекта, представляющего пользователей. Позже мы используем этот вновь созданный тип для создания функции, isAdult которая принимает один аргумент типа Userи возвращает boolean. После этого мы создаём данные нашего примера justine, которые можно использовать для вызова ранее определённой функции. Наконец, мы создаём новую переменную justine с информацией о том, является ли ребёнок взрослым.
В этом примере есть ещё кое-что, что вам следует знать. Во-первых, если бы мы не соблюдали заявленные типы, TypeScript предупредил бы нас, что что-то не так, и предотвратил бы неправильное использование. Во-вторых, не всё должно быть явно типизировано - TypeScript очень умён и может вывести за нас типы. Например, переменная isJustineAnAdult будет иметь тип, boolean даже если мы явно не указали её, или justine будет действительным аргументом для нашей функции, даже если мы не объявим эту переменную как тип User.
Хорошо, у нас есть код TypeScript. Как нам его запустить?
Первое, что нужно сделать, это установить TypeScript в наш проект:

npm i -D typescript

Теперь мы можем скомпилировать его в JavaScript, используя tsc команду в терминале. Давай сделаем это!
Если предположить, что наш файл называется example.ts, команда будет выглядеть так:

npx tsc example.ts

npx здесь означает "Выполнение пакета узла". Этот инструмент позволяет нам запускать компилятор TypeScript, не устанавливая его глобально.
tsc - это компилятор TypeScript, который возьмёт наш код TypeScript и скомпилирует его в JavaScript. Эта команда приведёт к созданию нового файла с именем example.js, который мы сможем запустить с помощью Node.js. Теперь, когда мы знаем, как компилировать и запускать код TypeScript, давайте посмотрим на возможности TypeScript по предотвращению ошибок в действии!
Вот как мы изменим наш код:

type User = {
  name: string;
  age: number;
};

function isAdult(user: User): boolean {
  return user.age >= 18;
}

const justine: User = {
  name: 'Justine',
  age: 'Secret!',
};

const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");

И вот что TypeScript говорит по этому поводу:

example.ts:12:5 - error TS2322: Type 'string' is not assignable to type 'number'.

12 age: 'Secret!',
~~~

example.ts:3:5
3 age: number;
~~~
The expected type comes from property 'age' which is declared here on type 'User'

example.ts:15:7 - error TS2322: Type 'boolean' is not assignable to type 'string'.

15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
~~~~~~~~~~~~~~~~

example.ts:15:51 - error TS2554: Expected 1 arguments, but got 2.

15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
~~~~~~~~~~~~~~~~~~~~~~

Found 3 errors in the same file, starting at: example.ts:12

Как видите, TypeScript успешно предотвращает доставку кода, который может работать неожиданно. Это прекрасно!

Подробнее о TypeScript

TypeScript предлагает множество других замечательных механизмов, таких как интерфейсы, классы, типы утилит и так далее. Кроме того, в более крупных проектах вы можете объявить конфигурацию компилятора TypeScript в отдельном файле и детально настроить, как он работает, насколько он строг и, например, где он хранит скомпилированные файлы. Подробнее обо всех этих замечательных вещах можно прочитать в официальной документации TypeScript.
Некоторые из других преимуществ TypeScript, о которых стоит упомянуть, заключаются в том, что его можно постепенно внедрять, он помогает сделать код более читабельным и понятным, а также позволяет разработчикам использовать современные возможности языка при выпуске кода для более старых версий Node.js.

Запуск кода TypeScript в Node.js

Node.js не может запускать TypeScript изначально. Вы не можете позвонить node example.ts из командной строки напрямую. Но есть три решения этой проблемы:

Компиляция TypeScript в JavaScript

Если вы хотите запустить код TypeScript в Node.js, вам необходимо сначала скомпилировать его в JavaScript. Вы можете сделать это с помощью компилятора TypeScript, tsc как показано ранее.
Вот небольшой пример:

npx tsc example.ts
node example.js

Запуск кода TypeScript с помощью ts-node

Вы можете использовать ts-node для запуска кода TypeScript непосредственно в Node.js без необходимости предварительной его компиляции. Но это не проверка типа вашего кода. Поэтому мы рекомендуем сначала проверить свой код, tsc а затем запустить его ts-node перед отправкой.
Чтобы использовать ts-node, вам необходимо сначала установить его:

npm i -D ts-node

Затем вы можете запустить свой код TypeScript следующим образом:

npx ts-node example.ts

Запуск кода TypeScript с помощью загрузчика Node.js

Начиная с Node.js v19.0.0, вы можете использовать собственный загрузчик. Загрузите загрузчик, например ts-node или tsx или nodejs-loaders
Для начала необходимо установить загрузчик:

npm i -D ts-node

Затем вы можете запустить свой код TypeScript следующим образом:

node --loader=ts-node/esm example.ts

TypeScript в мире Node.js

TypeScript хорошо зарекомендовал себя в мире Node.js и используется многими компаниями, проектами, инструментами и платформами с открытым исходным кодом. Вот некоторые из ярких примеров проектов с открытым исходным кодом, использующих TypeScript:
NestJS - надёжный и полнофункциональный фреймворк, который позволяет легко и приятно создавать масштабируемые и хорошо спроектированные системы.
TypeORM - отличный ORM, созданный под влиянием других известных инструментов из других языков, таких как Hibernate, Doctrine или Entity Framework.
Prisma - ORM нового поколения с декларативной моделью данных, генерируемыми миграциями и полностью типобезопасными запросами к базе данных.
RxJS - широко используемая библиотека для реактивного программирования.
AdonisJS - полнофункциональный веб-фреймворк с Node.js.
FoalTs - элегантный фреймворк Nodejs
И ещё много-много замечательных проектов... Возможно, даже ваш следующий!

Обсуждение закрыто.