077 Вводное видео
Служебные типы - это упрощение тех сложных манипуляций с типами из прошлой главы. Они предоставляют готовый функционал для работы с типами в ТС
078 Partial, Required, Readonly
У нас есть есть три дженерика, которые позволяют быстро отредактировать модификаторы доступности и обязательности ключей.
Partial
- делает все свойства в объекте необязательными для заполненияRequired
- делает все свойства в объекте необязательными для заполненияReadonly
- все свойства объекта можно заполнить только при создании и далее только просматривать- Сочетание дженериков - можно комбинировать выбранные дженерики, чтобы модифицировать доступность более гибко
Все данные инструменты построены под капотом на мапах. Partial представляет из себя мапу, которая на все ключи накидывает необязательность. Required
делает все ключи обязательными через “-?
”. Readonly
уже навешивает на все ключи readonly
модификатор
079 Pick, Omit, Extract, Exclude
Первые два дженерика - Omit
и Pick
- представляют из себя мапы, которые возвращают нам только нужные значения интерфейса в тип.
Omit
- выкидывает ненужное свойство из интерфейса и хранит в тайпе результат модификацииPick
- берёт только нужные значения из интерфейса
Далее уже идут дженерики, основанные на кондишеналах внутри.
Extract
- вытаскивает из вложенного юнион-типа только те свойства, которые удовлетворяют типу данных, который был передан вторым аргументом.Exclude
- исключает из юнион-тайпа все те значения, которые равны указанному типу во втором аргументе
Конкретно в нашем примере, Extract говорит, что нам нужно достать только свойства, тип которых будет строкой
И так выглядят эти дженерики под капотом
080 ReturnType, Parameters, ConstructorParameters
И дальше у нас идут дженерики, которые позволяют достать типы из функции.
ReturnType<>
- возвращает тип возвращаемого значения из функцииParameters<>
- возвращает кортеж типов аргументов функции
Так же доступна и такая запись для быстрого обращения к первому параметру
И так же у нас есть подобные дженерики для работы с классами:
ConstructorParameters
- возвращает кортеж параметров конструктора классаInstanceType
- вернёт тип инстанса
081 Awaited
Дженерик Awaited<>
показывает нам полный результат ожидания Promise
- а именно тот тип, который должен вернуть Promise
И примерно так выглядит Awaited
изнутрянки. Тут уже используются вложенные кондишенелы для реализации проверки. Тут уже через условия и рекурсию реализована возможность получать конечный возвращаемый тип промиса и его вложений
Первый кейс использования: нам нужно вернуть с бэка на фронт менюшку и поработать с ней. Конкретно тут удобство заключается в том, что мы можем поработать с этой менюшкой, как с определённым типом данных.
ReturnType
вернёт нам Promise<IMenu[]>
, а уже сам Awaited
вернёт IMenu[]
Ну и так же в этом примере представлен второй кейс использования авэйтеда. Он тут в качестве типа подставляется автоматически в качестве указания типа ретёрна из функции. Тут возвращается массив результатов асинхронных функций