strict - не одна перевірка, а набір строгих опцій, увімкнених разом:
noImplicitAny- помилка, якщо тип не можна вивести і він став биany(параметри функцій без типів);strictNullChecks-nullіundefined- окремі типи.stringне може бутиnull, і компілятор змушує перевірити значення перед використанням. Найважливіша з усіх;strictFunctionTypes- коректна (контраваріантна) перевірка параметрів функцій;strictBindCallApply- перевірка аргументівbind,call,apply;strictPropertyInitialization- поля класу мають бути ініціалізовані в конструкторі;noImplicitThis- помилка наthisз неявним типомany;useUnknownInCatchVariables- змінна вcatchмає типunknown, а неany;alwaysStrict- режим'use strict'у кожному файлі (у TypeScript 7 його вже не можна вимкнути).
function greet(user: { name: string } | null) {
return user.name; // з strictNullChecks: помилка 'user' is possibly 'null'
}
З TypeScript 6.0 strict увімкнено за замовчуванням. Проєкт, що покладався на старе значення false, має явно вказати "strict": false - і це сигнал, що варто планувати перехід.
Чому не вимикати:
- без
strictNullChecksTypeScript мовчить про найпоширеніші помилки виконання -Cannot read properties of undefined; - без
noImplicitAnyзначна частина коду фактично не типізована; - нові опції строгості з'являються в наборі з новими версіями - проєкт зі
strict: trueотримує їх автоматично.
Міграція великого проєкту, де одразу тисячі помилок:
- вмикати опції по одній (
strict: false+ окремі прапорці), починаючи зnoImplicitAnyіstrictNullChecks; - або вмикати
strictдля нових каталогів через окремі конфіги чи інструменти поступової міграції.
Понад strict корисні noUncheckedIndexedAccess, exactOptionalPropertyTypes, noImplicitOverride, noFallthroughCasesInSwitch - вони в набір strict не входять і вмикаються окремо.