Перейти к основному содержимому

TypeScript

TypeScript и JavaScript

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

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

  • Большая безопасность типов: TypeScript помогает предотвратить ошибки типизации, обеспечивая более строгую систему типов.
  • Поддержка современных функций JavaScript: TypeScript поддерживает последние функции JavaScript, включая деструктуризацию, модули и асинхронные функции.
  • Инструменты разработки: TypeScript предлагает улучшенные инструменты разработки, такие как автодополнение, навигацию по коду и рефакторинг.

Недостатки использования TypeScript

  • Сложность в изучении: Добавление новых концепций и синтаксиса может усложнить изучение для новичков.
  • Время на компиляцию: Требует дополнительного времени на компиляцию в JavaScript.
  • Необходимость в настройке: Потребность в конфигурации и настройке для оптимальной работы.

Перечисления (enum)

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

enum Colors {
Red = 'Red',
Green = 'Green',
Blue = 'Blue'
}

Тип never и void

  • never используется для типов, которые никогда не возвращают значение, например, функции, которые никогда не завершаются (например, функции, которые выбрасывают исключение или имеют бесконечный цикл).
  • void используется для функций, которые не возвращают значение.

Модификаторы доступа

TypeScript поддерживает модификаторы доступа publicprivate и protected, которые определяют видимость членов класса. Это помогает инкапсулировать данные и поведение класса.

Generic

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

function getFirstElement<T>(arr: T[]): T {
return arr[0];
}

const numbers = [1, 2, 3];
const strings = ['a', 'b', 'c'];

console.log(getFirstElement(numbers)); // Выведет: 1
console.log(getFirstElement(strings)); // Выведет: 'a'

🔗Generics

Тип unknown

Тип unknown используется, когда точный тип переменной неизвестен, и требуется явная проверка типа перед использованием переменной. Это предотвращает неявное использование типа any.

Настройка noImplicitAny

Настройка noImplicitAny требует явного указания типа для переменных, чтобы избежать неявного использования типа any. Это помогает предотвратить ошибки типизации.

Отличие type и interface

  • type может задать тип даже примитиву, а interface работает только с объектами.
  • interface может наследоваться и расширяться другими interface.
  • interface может быть имплементирован классом.
  • Можно объявить несколько одноименных interface, одноименные interface объединяются.

Отличие any от unknown

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

Utility Types

Utility Types в TypeScript предоставляют набор встроенных типов, которые позволяют создавать новые типы на основе существующих

  • Partial < T >: Делает все свойства типа T необязательными.
  • Readonly < T >: Делает все свойства типа T только для чтения.
  • Pick < T, K >: Извлекает определенные свойства из типа T.
  • Omit < T, K >: Исключает определенные свойства из типа T.
  • Record < K, T >: Создает новый тип, представляющий объект, ключами которого являются значения типа K, а значениями — значения типа T.
  • Exclude < T, U >: Извлекает из типа T все члены, которые не находятся в U.
  • NonNullable < T >: Удаляет из типа T все возможные значения null и undefined.
  • Parameters < Type >: Извлекает параметры функции типа Type.
  • ReturnType < Type >: Извлекает возвращаемый тип функции типа Type.
  • InstanceType < Type >: Извлекает экземпляр типа из конструктора типа Type.

🔗 Utility Types

Операторы & и |

  • Оператор & используется для создания нового типа, который является пересечением двух или более типов.
  • Оператор | используется для создания нового типа, который является объединением двух или более типов.