JavaRush /Курсы /Модуль 2: Fullstack /Настройка строгого режима TypeScript

Настройка строгого режима TypeScript

Модуль 2: Fullstack
10 уровень , 1 лекция
Открыта

2.1 Строгий режим TypeScript

Одной из ключевых особенностей TypeScript является возможность включения строгого режима, который помогает улучшить надежность и безопасность кода, выявляя потенциальные ошибки на этапе компиляции. Сейчас вы изучите, что такое строгий режим в TypeScript, его компоненты и как его настроить для вашего проекта.

Что такое строгий режим TypeScript?

Строгий режим TypeScript, или strict mode, включает набор опций компилятора, которые ужесточают проверки кода и повышают требования к его написанию. Включение строгого режима помогает разработчикам:

  1. Выявлять потенциальные ошибки на ранних этапах: строгий режим заставляет разработчиков явным образом указывать типы и обрабатывать возможные ошибки, что помогает предотвращать ошибки на этапе разработки.
  2. Улучшать читаемость и поддержку кода: код, написанный в строгом режиме, обычно имеет более четкие типы и структуры, что облегчает его понимание и сопровождение.
  3. Повышать безопасность кода: устранение неявных преобразований типов и использование строгой типизации делают код более предсказуемым и безопасным.

Компоненты строгого режима

Строгий режим TypeScript включает несколько опций компилятора, каждая из которых направлена на улучшение разных аспектов кода. Напоминаем, основные из них:

  1. strict
  2. noImplicitAny
  3. strictNullChecks
  4. strictFunctionTypes
  5. strictBindCallApply
  6. strictPropertyInitialization
  7. noImplicitThis
  8. alwaysStrict

2.2. strict

Флаг strict является главной опцией, которая включает все строгие проверки. Когда strict установлен в true, все остальные опции строгого режима также включаются. Это позволяет легко активировать строгий режим без необходимости настраивать каждую опцию по отдельности.

Пример настройки tsconfig.json:

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

2.3 noImplicitAny

Флаг noImplicitAny запрещает неявное присвоение типа any переменным. Когда TypeScript не может вывести тип переменной, он использует тип any по умолчанию. Включение noImplicitAny заставляет разработчиков явно указывать типы для таких переменных, что помогает избежать ошибок.

Пример:

TypeScript
    
      function add(a, b) {
        return a + b;
      }
    
  

Этот код вызовет ошибку компиляции, так как типы параметров a и b не указаны.

Исправленный пример:

TypeScript
    
      function add(a: number, b: number): number {
        return a + b;
      }
    
  

2.4 strictNullChecks

Флаг strictNullChecks заставляет разработчиков явно обрабатывать null и undefined. Когда этот флаг включен, null и undefined не являются допустимыми значениями для всех типов, кроме случаев, когда это явно указано.

Пример:

TypeScript
    
      let name: string;
      name = null; // Ошибка компиляции
    
  

Исправленный пример:

TypeScript
    
      let name: string | null;
      name = null; // Теперь это допустимо
    
  

2.5 strictFunctionTypes

Флаг strictFunctionTypes усиливает проверки совместимости типов функций. Он обеспечивает более строгие правила для сравнения типов функций, что помогает предотвратить ошибки, связанные с несоответствием параметров и возвращаемых значений.

Пример:

TypeScript
    
      type Handler = (a: number) => void;
      let handler: Handler;

      handler = (a: string) => {}; // Ошибка компиляции
    
  

2.6 strictBindCallApply

Флаг strictBindCallApply улучшает типизацию методов bind, call и apply. Он заставляет TypeScript проверять, что аргументы, передаваемые в эти методы, соответствуют типам параметров функции.

Пример:

TypeScript
    
      function greet(name: string): string {
        return `Hello, ${name}`;
      }

      const boundGreet = greet.bind(null, 123); // Ошибка компиляции
    
  

2.7 strictPropertyInitialization

Флаг strictPropertyInitialization требует, чтобы все свойства класса были инициализированы в конструкторе. Это помогает предотвратить использование неинициализированных свойств.

Пример:

TypeScript
    
      class Person {
        name: string;
        age: number;
      }

      const john = new Person(); // Ошибка компиляции
    
  

Исправленный пример:

TypeScript
    
      class Person {
        name: string;
        age: number;

        constructor(name: string, age: number) {
          this.name = name;
          this.age = age;
        }
      }

      const john = new Person('John', 30);
    
  

2.8 noImplicitThis

Флаг noImplicitThis запрещает использование this в функциях без явного указания его типа. Это помогает избежать ошибок, связанных с неправильным использованием контекста this.

Пример:

TypeScript
    
      class Counter {
        count: number = 0;

        increment() {
          this.count++;
        }

        getCount() {
          return this.count;
        }
      }

      const counter = new Counter();
      const getCount = counter.getCount;
      console.log(getCount()); // Ошибка компиляции
    
  

Исправленный пример:

TypeScript
    
      class Counter {
        count: number = 0;

        increment() {
          this.count++;
        }

        getCount(this: Counter) {
          return this.count;
        }
      }

      const counter = new Counter();
      const getCount = counter.getCount.bind(counter);
      console.log(getCount());
    
  

2.9. alwaysStrict

Флаг alwaysStrict автоматически включает строгий режим JavaScript (use strict) для всех файлов. Это обеспечивает выполнение кода в строгом режиме, что помогает выявлять ошибки на этапе выполнения.

Пример настройки tsconfig.json:

JSON
    
      {
        "compilerOptions": {
          "alwaysStrict": true
        }
      }
    
  

Настройка строгого режима в tsconfig.json

Чтобы включить строгий режим и его компоненты, отредактируйте файл tsconfig.json следующим образом:

JSON
    
      {
        "compilerOptions": {
          "strict": true,
          "noImplicitAny": true,
          "strictNullChecks": true,
          "strictFunctionTypes": true,
          "strictBindCallApply": true,
          "strictPropertyInitialization": true,
          "noImplicitThis": true,
          "alwaysStrict": true
        },
        "include": ["src"],
        "exclude": ["node_modules"]
      }
    
  

Преимущества использования строгого режима

  1. Улучшенная надежность кода: строгий режим помогает выявлять потенциальные ошибки на этапе компиляции, что повышает надежность кода.
  2. Повышенная безопасность: избежание неявных преобразований типов и использование строгой типизации делают код более безопасным и предсказуемым.
  3. Улучшенная поддержка и читаемость кода: явное указание типов и обработка ошибок делают код более понятным и легким для сопровождения.
  4. Лучшее соответствие стандартам: строгий режим помогает следовать лучшим практикам и стандартам написания кода.
3
Задача
Модуль 2: Fullstack, 10 уровень, 1 лекция
Недоступна
Включение strict в TypeScript
Включение strict в TypeScript
3
Задача
Модуль 2: Fullstack, 10 уровень, 1 лекция
Недоступна
Включение strictNullChecks
Включение strictNullChecks
3
Задача
Модуль 2: Fullstack, 10 уровень, 1 лекция
Недоступна
Флаг noImplicitAny
Флаг noImplicitAny
3
Задача
Модуль 2: Fullstack, 10 уровень, 1 лекция
Недоступна
Строгая инициализация свойств
Строгая инициализация свойств
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ