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 следующим образом:
```bash
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 и используется многими компаниями, open-source проектами, инструментами и фреймворками. Вот некоторые известные примеры open-source проектов, использующих TypeScript:
- NestJS - надежный и многофункциональный фреймворк, который делает создание масштабируемых и хорошо спроектированных систем легким и приятным
- TypeORM - отличный ORM, созданный под влиянием других известных инструментов из других языков, таких как Hibernate, Doctrine или Entity Framework
- Prisma - ORM нового поколения, включающий декларативную модель данных, сгенерированные миграции и полностью типобезопасные запросы к базе данных
- RxJS - широко используемая библиотека для реактивного программирования
- AdonisJS - Полнофункциональный веб-фреймворк с Node.js
- FoalTs - Элегантный Nodejs фреймворк
И еще много, много других замечательных проектов... Возможно, даже ваш следующий!