← Назад к вопросам

Работаешь больше с JavaScript или с TypeScript

1.3 Junior🔥 161 комментариев
#Node.js и JavaScript#TypeScript

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

TypeScript vs JavaScript: мой опыт

Мой выбор: преимущественно TypeScript

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

Почему я выбрал TypeScript

1. Типобезопасность экономит недели отладки

// TypeScript ловит ошибки ДО запуска кода
function calculatePrice(quantity: number, price: number): number {
  return quantity * price; // OK
}

calculatePrice("10", 5); // ОШИБКА на этапе компиляции!
// Argument of type 'string' is not assignable to parameter of type 'number'

А в JavaScript эта ошибка выявляется только в runtime:

function calculatePrice(quantity, price) {
  return quantity * price; // JavaScript вернёт "10" * 5 = 50 (случайно работает!)
}

calculatePrice("10", 5); // Вернёт 50, но это баг!

2. Автодополнение IDE спасает часы

interface User {
  id: number;
  name: string;
  email: string;
  createdAt: Date;
}

function getUser(id: number): User {
  // IDE подскажет все доступные свойства объекта User
  // В JavaScript нужно запоминать или искать в документации
}

const user = getUser(1);
user.n // IDE подскажет: name, но не email (потому что email длиннее)
user.em // IDE подскажет: email

3. Самодокументирование кода

// TypeScript — это документация, которая не устаревает
interface ApiResponse<T> {
  data: T;
  error?: string;
  timestamp: Date;
}

async function fetchUsers(): Promise<ApiResponse<User[]>> {
  // Сразу видно: возвращает ApiResponse с массивом User
  // Не нужно писать комментарии — типы говорят сами за себя
}

Когда я использую простой JavaScript

1. Скрипты и утилиты

// scripts/backup.js
const fs = require('fs');
const path = require('path');

fs.copyFileSync(
  path.join(__dirname, 'data.db'),
  path.join(__dirname, 'backups', `data-${Date.now()}.db`)
);
console.log('Backup completed');

Для однострочных скриптов TypeScript — это overhead

2. Быстрые прототипы

// Когда нужно что-то быстро проверить, JavaScript позволит
const arr = [1, 2, 3];
const result = arr.map(x => x * 2).filter(x => x > 3);
console.log(result);

Инструменты которые я использую

TypeScript в production:

// tsconfig.json
{
  "compilerOptions": {
    "strict": true,              // Полная типизация
    "noImplicitAny": true,       // Запретить any
    "strictNullChecks": true,    // Запретить null
    "esModuleInterop": true,
    "module": "commonjs",
    "target": "ES2020"
  }
}
// package.json
{
  "scripts": {
    "dev": "ts-node src/index.ts",
    "build": "tsc",
    "start": "node dist/index.js"
  },
  "devDependencies": {
    "typescript": "^5.0.0",
    "ts-node": "^10.0.0",
    "@types/node": "^20.0.0"
  }
}

Реальный пример из production

// src/services/userService.ts
interface CreateUserRequest {
  email: string;
  password: string;
  name: string;
}

interface User {
  id: string;
  email: string;
  name: string;
  createdAt: Date;
}

export class UserService {
  async createUser(request: CreateUserRequest): Promise<User> {
    // TypeScript гарантирует, что request имеет именно эти поля
    // IDE подскажет все методы, доступные на request
    
    const user: User = {
      id: generateId(),
      email: request.email,
      name: request.name,
      createdAt: new Date(),
    };
    
    await this.userRepository.save(user);
    return user;
  }
}

Статистика использования

В своей карьере:

  • 85% времени: TypeScript (production code, backend API)
  • 10% времени: JavaScript (скрипты, быстрые прототипы)
  • 5% времени: Другие языки (Python для DevOps, SQL для запросов)

Выводы

TypeScript:

  • Для production кода
  • Для больших команд
  • Для сложной логики
  • Для long-term проектов

JavaScript:

  • Для скриптов
  • Для прототипирования
  • Для простых утилит
  • Когда нужна максимальная скорость разработки

В современном Node.js разработке TypeScript стал стандартом. Даже если проект начинается с JavaScript, почти всегда приходится мигрировать на TypeScript при росте сложности.

Работаешь больше с JavaScript или с TypeScript | PrepBro