Серия «Тайпскрипт» — Ожидаемый тип

Я хотел бы начать с того, что делаю эту серию, чтобы лучше изучить и понять Typescript, поэтому не стесняйтесь поправлять меня или обращаться ко мне.

Если у нас есть тип, который является обернутым типом, как Promise. Как мы можем получить тип, который находится внутри обернутого типа?

Давайте рассмотрим пару примеров

type Example1 = Promise<string>
type Example2 = Promise<{ field: number }>
type Example3 = Promise<Promise<string | number>>


type Result1 = MyAwaited<Example1> // string
type Result2 = MyAwaited<Example2> // { field: number }
type Result3 = MyAwaited<Example3> // string | number

Войти в полноэкранный режим Выйти из полноэкранного режима

Здесь стоит отметить, что мы также должны принимать во внимание вложенные обещания.

Как бы выглядел такой тип?

type MyAwaited<Type> = Type extends Promise<infer K> 
? MyAwaited<K> : Type;
Вход в полноэкранный режим Выход из полноэкранного режима

Понимание ключевого слова infer

Ключевое слово infer можно использовать в условии в условном типе, чтобы поместить вычисляемый тип в переменную. Затем эта переменная может быть использована в условных ветвях.

Давайте разберем это на примере:

Type extends Promise<infer K> Здесь мы проверяем, расширяет ли Type тип Promise, и выводим тип, который обернут внутри.

Если он расширяет его, то есть наш Type имеет тип Promise (например: Promise>), то мы используем рекурсию для повторной проверки MyAwaited<K>.

если он не расширяет его, то мы просто возвращаем Type.

Спасибо!

Вы можете найти меня здесь Мой Твиттер

Оцените статью
devanswers.ru
Добавить комментарий