094 Вводное видео
095 Namespaces и reference
Сразу нужно сказать, что namespace и reference используются крайне редко. Первый могут использовать в тех же контрактах, а второй используется в том же NextJS во внутрянке фреймворка для реализации использования тайпов. Однако пространство имён может не поддерживаться разными линтерами и паковщиками и от этого могут быть определённые проблемы.
Так же есть альтернативный, старый вариант записи неймспейса (по смыслу он идентичен):
Чтобы скомпилировать разные ТС файлы в один файл, нужно:
И сразу нужно сказать, что при таком подходе, мы можем писать разные модули где угодно и обращаться к ним откуда угодно, потому что мы пишем всё в “один файл” на выходе
Такой подход опасен тем, что компилятор сваливает всё в один файл и мы будем получать кашу, которая обязательно выдаст ошибку - так делать нельзя
Чтобы свалка не образовывалась, нужно явно указывать какой референс будет на что ссылаться. Референсы указываются в комментариях
096 Модульность на backend
Первый способ: импорт commonjs
И вот так будет выглядеть любой импорт в ТС
Модульность CommonJS работает со стоковыми настройками:
Эта модульность генерирует старый код, который будет валиден для стандартов старее ES5
Второй способ: импорт по стандарту ES6
Так же мы можем компилировать сразу в ES6 модули все наши файлы. Там уже будут работать идентичные импорты и экспорты
И вот так будет выглядеть скомпилированный JS
Так же нужно упомянуть, что мы можем написать в ТС префикс “.js
” и ТС будет ссылаться на “.ts
” файл, а не на JS. Сделано это для поддержки нормальной компиляции в нативный JS
097 Модульность на frontend
Первый способ: импорт модульного файла
Базовые настройки tsconfig
Далее нам нужен сервер, который запустит наш сайт (можно воспользоваться npm-пакетом)
И при подключении JS к HTML нам нужно будет указать не только сам файл, но и то, что он модульный
Второй способ: импорт JS скомпилированного в один файл
При таком способе, нам нужно будет импортировать так же и инструменты, которые обеспечивают импорты
Третий способ: компиляция ТС и связка через WebPack/Rollup
Четвёртый способ: самый простой. При использовании различных фреймворков или библиотек (реакт, ангуляр), ТС уже настроен из коробки
098 Import и export
Экспортировать и импортировать мы можем любые объекты ТС
Совершать export default
мы можем только с объектами, которые мы можем увидеть в нативном JS. Дефолтно экспортнуть те же типы - нельзя
Так же можно совершить export default
только с одним объектом
Первое значение импортируется через обычный export
, а функция run импортируется дефолтно, поэтому её можно вызывать без скобок
Основным отличием export default
является не только то, что она экспортируется только одна, а ещё и то, что мы при импорте можем задать дефолтной функции любое имя
Так же данный синтаксис позволит нам импортировать всё из прошлого файла
Мы можем совершить вызов дефолтной функции и остальных обычных экспортов одной инструкцией
- Мы можем менять имена объектов при импорте через прокаст
- Мы можем импортировать и JS объекты и типы ТС одной инструкцией
Так же в ТС присуствует возможность указывать явно, что мы импортируем тип, написав import type { типы }
. Делается это для явного указания сборщикам и компиляторам, что это типы
Либо мы можем обозначать, что мы импортируем тип прямо внутри деструктуризированного вызова, указывая type
до написания импортируемого типа
099 Типизация сторонних библиотек
Сразу нужно сказать, что у нас есть деление библиотек на два лагеря: те, которые имеют типы и будут использоваться правильно в ТС и те, которые придётся немного дорабатывать из-за отсутствия типизации ТС
Если значок такой, то тайпсы есть для проекта, но они находятся в отдельном пакете. То есть нужно будет установить пакет дважды - ориг и отдельно тайпы
И сейчас попробуем решить проблему с типизацией данной библиотеки
Первый вариант: мы можем использовать таблетку, которая снимет симптомы, но не устранит проблему -
//@ts-ignore
. Этот комментарий заставит игнорировать ошибку ТС в следующей строке
Второй вариант: мы можем в папке с нашим ТС файлом создать файл
types.d.ts
и внутри него продекларировать нужные нам функции из библиотеки самостоятельно