Пост

Typescript. Установка и запуск

Как установить и запустить typescript локально

Typescript. Установка и запуск

Вводная

В этой серии статей изучим основы typescript. Сегодня начнем с установки окружения и запуска проекта.

Typescript

Typescript является строгим надмножеством над javascript.

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

Typescript включает в себя компилятор, обрабатывающий файлы typescript и генерирующий чистый js код, который можно запустить в Node.js или в браузере.

В более широком смысле typescript дополняет javascript, но не заменяет его. Чтобы эффективно работать с typescript, необходимо хорошо знать javascript.

Компилятор typescript способен преобразовать новейший javascript код, в код соответствующий более старым версиям javascript. Что дает возможность разработчикам использовать новые возможности языка, и запускать его в любом браузере.

Подготовка окружения

Для того чтобы экспериментировать с примерами, подготовим тестовое окружение в docker, самый быстрый вариант это сделать с помощью сборщика vite.

Создадим стандартный dockerfile nodejs

1
2
3
4
5
6
7
8
9
FROM node:lts

RUN useradd -m alex && usermod -a -G node alex

RUN npm install -g npm@latest

WORKDIR demo-applications/ts-vite

USER node

Добавим docker-compose.yml

1
2
3
4
5
6
7
services:
  cli:
    build:
      context: docker
      dockerfile: node/Dockerfile
    volumes:
      - ./:/demo-applications/ts-vite

И чтобы это все запускать Makefile

1
2
3
4
5
6
7
8
9
10
11
12
docker-build:
	docker compose build --pull
docker-up:
	docker compose up -d
docker-down:
	docker compose down --remove-orphans
npm-install:
	docker compose run --rm cli npm install
compile:
	docker compose run --rm cli npm run compile
npm-be-updated-all:
	docker compose run --rm cli npm outdated --depth=9999

Теперь можем уже поставить в проект vite и typescript, выполнив команду

1
docker compose run --rm cli npm install -D vite typescript

Так же дополнив package.json специфическими вещами vite и нашими командами, в результате получим примерно такой файл

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
  "name": "ts-vite",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "preview": "vite preview",
    "compile": "tsc --outDir out"
  },
  "devDependencies": {
    "typescript": "^5.8.2",
    "vite": "^6.2.1"
  }
}

Не забудем добавить .gitignore

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

Так же для vite нужно добавить точку входа в приложение - это index.html и main.ts

1
2
3
4
5
6
7
8
9
10
11
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>TS</title>
  </head>
  <body>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>
1
2
3
let one: number = 1;

console.log(one);

Чтобы корректно работал typescript, vite так же предоставляет конфигурацию

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
  "compilerOptions": {
    "target": "ES2020",
    "useDefineForClassFields": true,
    "module": "ESNext",
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "isolatedModules": true,
    "moduleDetection": "force",
    "noEmit": true,

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true,
    "noUncheckedSideEffectImports": true
  },
  "include": ["src"]
}

Все готово, чтобы запустить сборку.

Сборка

Готовый проект будет собираться в папке dist, достаточно выполнить команду

1
docker compose run --rm cli npm run build

В результате сборщик нам собирает готовый к использованию в браузере файл javascript

1
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))i(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function s(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(e){if(e.ep)return;e.ep=!0;const r=s(e);fetch(e.href,r)}})();let n=1;console.log(n);

Но здесь не понятно, что же в итоге получится, чтобы запустить компиляцию отдельного файла у нас есть команда compile

1
docker compose run --rm cli npm run compile src/main.ts

В результате в папке out получаем фаил после обработке компилятором typescript.

Таким образом получаем способы сборки проекта. На базовом уровне изучения этого достаточно.

В следующий раз

В будущих статьях последовательно разберем основные возможности typescript.

Авторский пост защищен лицензией CC BY 4.0 .

Хотите оптимизировать свой бизнес, нужен сервис, сайт или интеграция.

Бесплатно расчитаю время разработки, предложу решение вашей задачи.