Эта статья предназначена для людей, которые знают основы TypeScript, но не использовали его в большом проекте и / или не исследовали его расширенные типы.
Моя цель - убедить вас на множестве примеров, что мощная продвинутая система типов TypeScript может обеспечить удовлетворительные решения сложных проблем веб-инженерии и может использоваться для умопомрачительного и увлекательного моделирования.
Посмотрите видео и ознакомьтесь с фрагментами кода ниже:
Строительные блоки
Эти типы вы можете найти в официальной документации TypeScript. Они являются строительными блоками для более сложных / модных вещей. Считайте этот раздел шпаргалкой.
Типы пересечений
Получите всех участников из нескольких типов:
Если вы думаете о типах как о наборах, то здесь вы получите пересечение двух типов, то есть меньший набор. Это может сбивать с толку, поскольку фактический результирующий тип имеет «больший» интерфейс, то есть объединение членов обоих типов.
Типы союзов
Получите общие члены из нескольких типов (результирующий тип - это объединение между двумя, то есть больший набор):
Охранники нестандартного типа
Приведение условного типа:
С помощью ключевого слова is вы можете определять функции для определения «вручную», принадлежит ли значение типу, и TypeScript затем принимает этот тип в истинной части условного оператора.
Утверждение типа
Сокращение приведения, если вы знаете, что определенная переменная определенно определена:
Литеральные типы
Вы можете использовать фактические примитивные литералы (строки, логические значения и т. Д.) В качестве типов:
Если вы думаете о типах как о наборах, тип 'ROCK'
- это набор, содержащий только значение 'ROCK'
.
Никогда
Выражение, которое никогда не разрешается:
Этот тип волшебным образом появится во многих неожиданных местах в приведенных ниже примерах.
Неизвестный
Более безопасный тип, чем любой другой, для переменных, которым вы не можете доверять:
Типы индексов
Доступ к типам ключей или значений объекта:
Сопоставленные типы
Вывести тип объекта из другого:
Эта мощная абстракция станет более понятной, когда вы увидите ее конкретные приложения.
Условные типы
Пусть тип зависит от другого типа с условием:
Вот реальное приложение для условных типов:
С помощью ключевого слова infer вы можете ввести переменную типа, тип которой будет выведен:
Разные узоры
Функциональное программирование
Это не совсем связано с расширенными типами, это скорее иллюстрация того, как можно программировать с помощью TypeScript легким, но безопасным способом. В мире Java в парадигме чистого кода есть две основные категории классов: объекты и типы данных. Типы данных представляют данные (думают, геттеры и сеттеры), а объекты представляют функциональность (думают, методы). С помощью TypeScript можно еще больше упростить этот подход, просто используя интерфейсы для представления данных и функции для управления данными. Никаких громоздких шаблонов, никаких конструкторов, геттеров и сеттеров. Просто верните простой объект, и машинописный текст обеспечит его правильную структуру.
Дискриминационные союзы
TypeScript понимает, что вы тщательно проверили все возможные варианты типа в операторе switch, и не будет заставлять вас использовать оператор по умолчанию.
Производные типы из констант
Часто нам нужны буквальные типы и как значения, и как типы. Чтобы избежать избыточности, извлеките последнее из первого.
Ненадежный пользовательский ввод
Недоверенный пользовательский ввод - приложение для неизвестного.
Сопоставленные типы
Создайте версию типа только для чтения:
Вывести частичную версию типа:
Получите версию типа, в котором все поля обязательны:
Вывести версию типа, допускающую значение NULL:
Вывести тип только с определенными полями (Выбрать):
Пример из практики, где мы выбираем определенные столбцы из таблицы SQL, а TypeScript автоматически выводит для нас частичный тип:
Вывести запись (все свойства имеют один и тот же заданный тип) из типа:
Условные типы
Типы фильтровальных соединений
Отфильтровать / извлечь подмножество из типа:
Отличить / исключить подмножество из типа:
Исключить null и undefined из типизированного (таким образом, делая его не допускающим значения NULL):
Пропускать определенные поля из типа:
Вот пример из практики (как правильно набрать HOC React.js):
Комбинирование с отображенными типами
Получить свойства функции объекта:
Получите нефункциональные свойства объекта:
Получить возвращаемый тип функции:
Получите тип экземпляра функции-конструктора:
Перспективный Redis
Еще один пример из практики. Все методы в библиотеке npm redis используют обратные вызовы. Нам нравится использовать обещания и async / await. Мы можем унаследовать новый тип от старого в зависимости от того, как мы его построим.
Заключение
Я надеюсь, что убедил вас в силе TypeScript. Теперь вперед и НАБИРАЙТЕ!
Ресурсы:
Связаться
В smartive мы разрабатываем сложные веб-приложения. У вас есть какие-либо вопросы? Не стесняйтесь обращаться к нам в любое время: [email protected]