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
}