Зачем нужен infer
1️⃣ Как кратко ответить
Infer в TypeScript используется для извлечения типов из других типов. Это позволяет создавать более гибкие и динамичные типы, которые могут адаптироваться к изменениям в коде, улучшая читаемость и поддержку кода.
2️⃣ Подробное объяснение темы
В TypeScript infer — это ключевое слово, используемое в условных типах для извлечения типов из других типов. Это позволяет создавать более сложные и адаптивные типы, которые могут автоматически подстраиваться под изменения в коде.
Зачем это нужно
-
Гибкость и адаптивность:
inferпозволяет создавать типы, которые автоматически адаптируются к изменениям в структуре данных. Это особенно полезно в больших проектах, где структура данных может часто меняться. -
Улучшение читаемости: Использование
inferможет сделать код более читаемым, так как он позволяет избежать дублирования кода и явного указания типов. -
Поддержка и масштабируемость: Код, использующий
infer, легче поддерживать и масштабировать, так как изменения в одном месте автоматически отражаются в других местах, где используется извлеченный тип.
Как это работает
Рассмотрим пример использования infer для извлечения типа возвращаемого значения функции:
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;
type ReturnType<T>: Определяем новый типReturnType, который принимает типT.T extends (...args: any[]) => infer R: Проверяем, является лиTфункцией. Если да, то используемinfer Rдля извлечения типа возвращаемого значения этой функции.? R : any: ЕслиTявляется функцией, тоReturnType<T>будет равенR(извлеченный тип возвращаемого значения). В противном случае, он будет равенany.
Пример использования
Предположим, у нас есть функция:
function getUser() {
return { name: "Alice", age: 30 };
}
Мы можем использовать ReturnType для извлечения типа возвращаемого значения этой функции:
type User = ReturnType<typeof getUser>;
typeof getUser: Получаем тип функцииgetUser.ReturnType<typeof getUser>: Используем наш условный типReturnTypeдля извлечения типа возвращаемого значения функцииgetUser, который будет{ name: string; age: number; }.
Таким образом, infer позволяет нам динамически извлекать и использовать типы, что делает код более гибким и поддерживаемым.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться