Infer
Внутри условия условного типа можно не только проверить форму, но и «поймать» её часть в новую переменную типа. Для этого используется ключевое слово infer:
Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноВнутри условия условного типа можно не только проверить форму, но и «поймать» её часть в новую переменную типа. Для этого используется ключевое слово infer:
type ElementOf<T> = T extends (infer E)[] ? E : never;
type A = ElementOf<string[]>; // stringЧитается как «если T это массив чего-то, назови это что-то E и верни его».
В задании своя версия ReturnType, которая пока ничего не умеет:
Ошибка: «'count' is of type 'unknown'». MyReturnType для любой функции возвращает unknown, поэтому count оказывается неизвестным, и умножать его нельзя.
Нужно, чтобы тип проверял, является ли T функцией, и если да, доставал тип того, что она возвращает. Аргументы функции при этом не важны: подойти должна функция с любыми параметрами.
Перепиши MyReturnType через условный тип с infer, чтобы он возвращал тип результата функции. Для () => number это должен быть number, и doubled должен посчитаться. Для не-функций верни never. Строки с count и doubled менять не нужно.