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 install -D typescript
Теперь мы можем скомпилировать его в JavaScript, используя команду tsc
в терминале. Давайте сделаем это!
Предполагая, что наш файл называется example.ts
, команда будет выглядеть так:
npx tsc example.ts
TIP
npx здесь означает Node Package Execute. Этот инструмент позволяет нам запускать компилятор 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 install -D ts-node
Затем вы можете запустить свой код TypeScript следующим образом:
npx ts-node example.ts
Запуск кода TypeScript с помощью tsx
Вы можете использовать tsx для запуска кода TypeScript непосредственно в Node.js без необходимости предварительной компиляции. Но он не выполняет проверку типов вашего кода. Поэтому мы рекомендуем сначала выполнить проверку типов кода с помощью tsc
, а затем запустить его с помощью tsx
перед выпуском.
Для использования tsx необходимо сначала установить его:
npm install -D tsx
Затем вы можете запустить свой код TypeScript следующим образом:
npx tsx example.ts
Если вы хотите использовать tsx
через node
, вы можете зарегистрировать tsx
через --import
:
node --import=tsx example.ts
TypeScript в мире Node.js
TypeScript хорошо зарекомендовал себя в мире Node.js и используется многими компаниями, проектами с открытым исходным кодом, инструментами и фреймворками. Некоторые из известных примеров проектов с открытым исходным кодом, использующих TypeScript:
- NestJS - надежный и полнофункциональный фреймворк, который упрощает и делает приятным создание масштабируемых и хорошо спроектированных систем
- TypeORM - отличный ORM, вдохновленный другими известными инструментами из других языков, таких как Hibernate, Doctrine или Entity Framework
- Prisma - ORM следующего поколения с декларативной моделью данных, генерируемыми миграциями и полностью типизированными запросами к базе данных
- RxJS - широко используемая библиотека для реактивного программирования
- AdonisJS - полнофункциональный веб-фреймворк с Node.js
- FoalTs - Элегантный фреймворк Nodejs
И многие, многие другие отличные проекты... Возможно, даже ваш следующий!