Learn JavaScript

Что учить дальше: DOM глубже, TypeScript, фреймворк

После базы JavaScript обычно появляется вопрос: что дальше и в каком порядке. Ниже - маршруты, которые помогают расти без ощущения, что обучение стало бесконечным.

1) Углубить DOM и браузерные API

Если основной интерес - интерактивные страницы, небольшие приложения, виджеты, формы, интерфейсы, то логично сначала укрепить браузерную часть.

Что углублять:

  • События: всплытие и погружение, capture, once, passive
  • Формы: валидация, FormData, чтение/запись значений, доступность
  • Манипуляции DOM: closest, matches, classList, работа с шаблонами
  • Рендеринг: частичные обновления, фрагменты (DocumentFragment)
  • Сеть: fetch GET/POST, заголовки, CORS на уровне понимания
  • Хранилища: localStorage, sessionStorage, cookies (на уровне отличий)
  • Время и задачи: setTimeout, setInterval, микро- и макрозадачи на базовом уровне
  • Производительность: что такое reflow/repaint, почему важны пакетные обновления

Мини-пример: событийная модель и делегирование.

const list = document.querySelector("#list");

list.addEventListener("click", (event) => {
  const btn = event.target.closest("[data-action]");
  if (!btn) return;

  const action = btn.dataset.action;
  console.log("action:", action);
});

2) Разобраться с проектной “обвязкой” (tooling)

Даже без фреймворка полезно понимать, как код превращается в проект.

Мини-набор тем:

  • npm и зависимости
  • структура проекта и импорт/экспорт
  • сборка (Vite или похожий инструмент)
  • линтер и форматирование (ESLint, Prettier)
  • dev-server и production build

Мини-пример: почему модули удобны.

math.js

export function sum(a, b) {
  return a + b;
}

main.js

import { sum } from "./math.js";
console.log(sum(2, 3));

3) TypeScript: когда он реально помогает

TypeScript добавляет типы. Это дает:

  • меньше ошибок “не тот тип” и “undefined”
  • подсказки в редакторе
  • более безопасные рефакторинги

TypeScript особенно полезен, если:

  • проект растет, появляется много функций и файлов
  • данные приходят из API (JSON) и нужно понимать форму объектов
  • важно избегать “сломалось само” из-за типов

Мини-пример (псевдокод TS, чтобы увидеть идею):

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

function formatUser(user: User): string {
  return user.name.toUpperCase();
}

В чистом JS такую проверку приходится делать руками. В TypeScript часть ошибок отсеивается заранее.

4) Фреймворк: как выбрать и когда переходить

Фреймворки (React, Vue, Svelte и другие) решают типовые задачи UI:

  • компоненты
  • состояние и обновления
  • маршрутизация (часто через библиотеку)
  • работа с формами и списками
  • структура крупных интерфейсов

Переход к фреймворку обычно имеет смысл, когда:

  • интерфейс стал сложным: много состояний и отображений
  • требуется повторно использовать UI-блоки
  • появляется много экранов и логики вокруг данных

Важно: фреймворк не заменяет знание JavaScript и DOM, а опирается на них.

Мини-пример, показывающий, что “состояние” - это обычные данные, а “рендер” - отображение.

const state = { count: 0 };
const out = document.querySelector("#out");
const btn = document.querySelector("#inc");

function render() {
  out.textContent = String(state.count);
}

btn.addEventListener("click", () => {
  state.count++;
  render();
});

render();

Эта идея потом переносится в любой фреймворк, только механизм обновления будет удобнее.

5) Еще два направления, которые быстро дают пользу

Тестирование (минимальный старт)

Тесты полезны, когда появляется логика преобразования данных.

function sum(a, b) {
  return a + b;
}

console.log(sum(2, 3) === 5);

Это не замена полноценным тестам, но помогает привыкнуть проверять ожидания.

Работа с данными и форматами

Полезно уверенно владеть:

  • JSON (parse/stringify)
  • массивы объектов (map/filter/reduce)
  • сортировки и группировки
  • обработка ошибок и “грязных” данных

6) Рекомендуемый порядок

Если цель - интерфейсы в браузере:

  1. DOM глубже + события + формы
  2. fetch и работа с API
  3. структура проекта (модули, сборка)
  4. TypeScript (по мере роста кода)
  5. фреймворк

Если цель - быстрее перейти к современному фронтенду:

  1. базовый DOM (достаточно)
  2. структура проекта и модули
  3. TypeScript
  4. фреймворк
  5. практика с реальным API и состоянием

7) Маленький ориентир: что должно быть комфортным перед фреймворком

  • уверенное чтение ошибок и стеков
  • понимание событий и делегирования
  • умение работать с массивами объектов
  • базовые async/await и fetch
  • структура кода на функции и модули

Этого хватает, чтобы фреймворк воспринимался как инструмент, а не как “магия”.