Что такое strict mode в TypeScript и зачем его включать?

JuniorTypeScript · Frontend·Обновлено 21 июля 2026
Коротко
Strict mode — это набор строгих проверок компилятора TypeScript, который активируется флагом "strict": true в tsconfig.json и включает несколько правил, предотвращающих распространённые ошибки.

Что такое strict mode

Strict mode в TypeScript — это группа флагов компилятора, которые включаются одной настройкой "strict": true в tsconfig.json. Он усиливает статическую проверку типов и помогает писать более безопасный, предсказуемый код.

Что входит в strict mode

При включении strict: true автоматически активируются следующие флаги:

  • strictNullChecks — запрещает присваивать null и undefined переменным без явного указания
  • strictFunctionTypes — строгая проверка типов параметров функций
  • strictBindCallApply — типизация методов bind, call, apply
  • strictPropertyInitialization — требует инициализации свойств класса в конструкторе
  • noImplicitAny — запрещает неявный тип any
  • noImplicitThis — запрещает неявный this: any
  • alwaysStrict — добавляет 'use strict' в каждый скомпилированный файл

Пример: strictNullChecks

// Без strict mode — компилируется без ошибок
function getLength(str: string) {
  return str.length;
}
getLength(null); // Ошибки нет, но в рантайме всё сломается

// Со strict mode — ошибка на этапе компиляции
function getLength(str: string) {
  return str.length;
}
getLength(null); // Ошибка: Argument of type 'null' is not assignable to parameter of type 'string'

Пример: noImplicitAny

// Без strict mode — параметр неявно получает тип any
function process(data) {
  return data.value; // TypeScript не проверяет, есть ли .value
}

// Со strict mode — ошибка компиляции
function process(data) { // Ошибка: Parameter 'data' implicitly has an 'any' type
  return data.value;
}

// Правильный вариант — явная типизация
function process(data: { value: string }) {
  return data.value;
}

Пример: strictPropertyInitialization

// Со strict mode — ошибка, если свойство не инициализировано
class User {
  name: string; // Ошибка: Property 'name' has no initializer

  constructor() {
    // name не задан
  }
}

// Правильный вариант
class User {
  name: string;

  constructor(name: string) {
    this.name = name; // Инициализируем в конструкторе
  }
}

Зачем включать strict mode

  1. Ранняя поимка ошибок — большинство runtime-ошибок обнаруживается ещё на этапе компиляции
  2. Самодокументирующий код — явная типизация делает намерения разработчика понятными
  3. Безопаснее работа с null/undefined — самая частая причина падений в продакшне
  4. Стандарт в индустрии — все современные TypeScript-проекты используют strict mode

Как включить

{
  "compilerOptions": {
    "strict": true
  }
}

Либо включать флаги по отдельности, если нужна постепенная миграция старого проекта.

Что хочет услышать интервьюер

Кандидат знает, что strict — это группа флагов, а не один параметр

Может назвать хотя бы 2–3 конкретных флага из состава strict (strictNullChecks, noImplicitAny)

Понимает, зачем нужен strictNullChecks — предотвращение ошибок с null/undefined в рантайме

Знает, где включается strict mode — в tsconfig.json

Осознаёт практическую пользу: ошибки компилятора вместо рантайм-падений

Пример: Включение strict mode в tsconfig.json

// tsconfig.json
{
  "compilerOptions": {
    "strict": true
    // Эквивалентно явному перечислению:
    // "strictNullChecks": true,
    // "noImplicitAny": true,
    // "strictFunctionTypes": true,
    // "strictBindCallApply": true,
    // "strictPropertyInitialization": true,
    // "noImplicitThis": true,
    // "alwaysStrict": true
  }
}

Пример: strictNullChecks в действии

// Без strict — нет ошибки компиляции, но падение в рантайме
function getUserName(user?: { name: string }) {
  return user.name; // Ошибка только в рантайме если user = undefined
}

// Со strict — ошибка сразу при компиляции
function getUserName(user?: { name: string }) {
  return user.name; // Ошибка: Object is possibly 'undefined'
}

// Правильный вариант со strict
function getUserName(user?: { name: string }) {
  return user?.name ?? 'Аноним'; // Явная обработка undefined
}

Типичные ошибки

Думают, что strict mode — это один флаг с одной функцией, а не набор нескольких правил

Не могут объяснить разницу между поведением с strict и без него на конкретном примере

Путают strict TypeScript с 'use strict' в JavaScript — это разные вещи (хотя alwaysStrict добавляет и его)

Считают, что strict mode необязателен и его можно игнорировать в реальных проектах

Не знают, как постепенно мигрировать на strict в уже существующем проекте через отдельные флаги

Лучшие курсы по теме

изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Feature-Sliced Design

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.5
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее