StudyCode
К практике
НачальныйTypeScriptтипыкомпиляция
🔷JuniorTypeScriptтипыкомпиляцияинтерфейсыgenerics

TypeScript

Зачем добавлять типы в JavaScript: меньше багов, лучше автодополнение, уверенный рефакторинг.

TSTypeScript — от кода до браузера

src/app.ts

const user: User = {
  name: "Иван",
  age: 25,
}
tsc / Vite / Next.js↓ убирает все типы

dist/app.js

const user = {
  name: "Иван",
  age: 25,
}
Браузер / Node.js
✓ Выполняется как обычный JavaScript

Браузер никогда не видит TypeScript — только чистый JS

Язык примеров:
Шаг 1 из 3
1

Зачем TypeScript

Проблема JavaScript при росте проекта

javascript
// JS — тип неизвестен до запуска
function getUser(id) {
  return fetch('/api/users/' + id).then(r => r.json());
}

// Что вернёт эта функция? { name, email }? { id, username }?
// Узнаешь только в рантайме (или из доков, если они есть)

const user = await getUser(42);
console.log(user.nmae); // ← опечатка! Нет ошибки до запуска

TypeScript ловит ошибки ДО запуска

typescript
interface User {
  id: number;
  name: string;
  email: string;
}

async function getUser(id: number): Promise<User> {
  const res = await fetch('/api/users/' + id);
  return res.json();
}

const user = await getUser(42);
console.log(user.nmae); // ← ОШИБКА КОМПИЛЯЦИИ: Property 'nmae' does not exist
console.log(user.name); // ✓

Что даёт TypeScript

ФичаЧто это даёт
ТипыОшибки в IDE, а не в проде
АвтодополнениеIDE знает все поля объекта
РефакторингПереименовал функцию — TypeScript найдёт все места
ДокументацияТипы = живая документация API

TypeScript — не другой язык. Любой JS-код — валидный TS. Ты просто добавляешь аннотации.

JavaScript
// Тот же код без TypeScript
// Всё работает, но...

const name = "Иван";        // какой тип? Неизвестно без чтения
const age = 25;

const scores = [85, 92, 78]; // может содержать строки — не ясно

// status может быть чем угодно
let userStatus = "active";
userStatus = "deleted";     // ← ошибка обнаружится только в рантайме

function findUser(id) {
  return users.find(u => u.id === id); // может вернуть undefined — забыл проверить?
}

const user = findUser(42);
console.log(user.name);     // ← TypeError если не найден — только в рантайме!