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 поддерживает модификаторы доступа public
, private
и 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'
Тип 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.
Операторы &
и |
- Оператор
&
используется для создания нового типа, который является пересечением двух или более типов. - Оператор
|
используется для создания нового типа, который является объединением двух или более типов.