Strict mode в TS

Набор строгих проверок компилятора, которые ловят больше ошибок на этапе компиляции.

Зачем нужно

  • Максимальная типобезопасность
  • Меньше runtime-ошибок
  • Рекомендация для всех новых проектов

Где используется

  • Все TS-проекты (включается в tsconfig.json)

Включение

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

"strict": true включает ВСЕ флаги ниже:

Что включает strict

Флаг Что делает
strictNullChecks null/undefined не присваиваются другим типам
noImplicitAny Запрет неявного any
strictFunctionTypes Строгая проверка типов функций
strictBindCallApply Проверка bind, call, apply
strictPropertyInitialization Все свойства класса инициализированы
noImplicitThis Запрет неявного this: any
alwaysStrict "use strict" в каждом файле
useUnknownInCatchVariables catch(e) -- e имеет тип unknown

Примеры

// strictNullChecks
function greet(name: string | null) {
  // console.log(name.toUpperCase()); // Ошибка!
  if (name) {
    console.log(name.toUpperCase()); // OK
  }
}

// noImplicitAny
// function parse(data) {} // Ошибка! Укажи тип
function parse(data: string) {} // OK

// strictPropertyInitialization
class User {
  name: string;
  constructor(name: string) {
    this.name = name; // обязательно
  }
}

Дополнительные строгие флаги (не в strict)

{
  "noUncheckedIndexedAccess": true,
  "noImplicitReturns": true,
  "noFallthroughCasesInSwitch": true,
  "exactOptionalPropertyTypes": true
}

Связанные темы

Ресурсы