ReturnType

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

Утилита ReturnType<T> позволяет автоматически получить тип возвращаемого значения функции. Это мощный инструмент для создания гибких типов, которые подстраиваются под изменения в коде.

Часто используется в связке с оператором typeof. Например, если у вас есть функция createId, вы можете создать тип, который в точности повторяет то, что она возвращает, не переписывая его вручную:

type IdType = ReturnType<typeof createId>;

В этом уроке мы разберем синтаксис, частые ошибки и сценарии использования ReturnType для типизации ответов API и фабричных функций.

Список тем

1. Основы синтаксиса

id: 40732_rt_01_basic

В TypeScript утилитные типы позволяют создавать новые типы на основе существующих. В этом задании вам нужно использовать один из таких утилитных типов для извлечения типа возвращаемого значения функции. Дополните объявление типа GreetReturn, заполнив пропуск так, чтобы тип GreetReturn соответствовал типу значения, которое возвращает функция greet. Обратите внимание на синтаксис применения утилитного типа к типу функции.

Заполните пропуски
function greet(): string {
    return "Hello";
}
type GreetReturn = input1S<typeof greet>;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Использование typeof

id: 40732_rt_02_typeof

В этом задании вам нужно дополнить фрагмент кода, использующий утилитный тип ReturnType. В конструкции ReturnType пропущен оператор, который преобразует функцию в её тип. Выберите правильный вариант из выпадающего списка, чтобы код стал корректным. Обратите внимание, что ReturnType ожидает тип функции, а не её значение.

Нужно правильно расставить в пропуски предложенные варианты
function getUser() {
  return { name: 'Alice', age: 30 };
}

// Получаем тип возвращаемого значения функции getUser
type User = ReturnType<input1S getUser>;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Предсказание типа

id: 40732_rt_03_predict

Проанализируйте приведённый код на TypeScript. Функция `createData` возвращает объект определённой структуры. Используя утилитный тип `ReturnType`, определите, какому типу будет соответствовать результат вызова этой функции. Выберите верное описание типа из предложенных вариантов.

Выберите правильный вариант ответа
function createData() {
  return {
    id: 1001,
    title: "Sample Project",
    meta: {
      createdAt: new Date(),
      tags: ["frontend", "typescript"]
    },
    status: "active" as const,
    milestones: [
      { week: 1, goal: "Setup" },
      { week: 2, goal: "Prototype" }
    ]
  };
}

type Data = ReturnType<typeof createData>;
Сообщения
Проверить
Показать подсказку

4. Передача значения вместо типа

id: 40732_rt_04_error

В этом фрагменте кода TypeScript используется утилитный тип ReturnType для получения типа возвращаемого значения функции. Однако в коде допущена ошибка: в качестве аргумента для ReturnType передается сама функция (значение), а не её тип. Исправьте строку с ошибкой, чтобы код стал корректным и компилировался без ошибок.

Найдите ошибку и исправьте
function getUser() {
  return { name: 'John', age: 30 };
}
 
type User = ReturnType<getUser>;
 
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Сопоставление функций и типов

id: 40732_rt_05_match

В левой колонке приведены сигнатуры функций на TypeScript. В правой колонке указаны типы, которые возвращает утилитный тип ReturnType при применении к каждой из этих функций. Сопоставьте каждую функцию с соответствующим типом возвращаемого значения. Обратите внимание на типы параметров, возвращаемые значения и асинхронные функции.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
function greet(name: string): string { return `Hello, ${name}`; }
function logMessage(): void { console.log('Message'); }
async function fetchData(): Promise<{ id: number }> { return { id: 1 }; }
function getValue<T>(value: T): T { return value; }
function throwError(): never { throw new Error('Error'); }
string
void
T
Promise<{ id: number }>
never
Сообщения
Проверить
Показать подсказку

6. Создание алиаса

id: 40732_rt_06_build

Из предложенных строк соберите корректный TypeScript-код, который создаёт алиас типа MyResult, извлекающий тип возвращаемого значения функции getData. Код должен состоять из одной строки объявления алиаса. Игнорируйте лишние строки, которые не относятся к заданию.

Перетяните в правильном порядке строки из одного блока в другой
type MyResult = ReturnType<typeof getData>;
type MyResult = ReturnType<getData>;
type MyResult = ReturnType<() => string>;
const result: MyResult = 'test';
function getData(): string { return 'data'; }
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

7. Разбор конструкции

id: 40732_rt_07_highlight

Разметьте в строке кода TypeScript, использующей утилитный тип ReturnType, следующие элементы: саму утилиту ReturnType, оператор запроса типа typeof и имя функции. Для каждого выделенного фрагмента выберите соответствующий тип из предложенных вариантов. Это задание поможет закрепить понимание синтаксиса и назначения утилитных типов в TypeScript.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
type Result = {{ReturnType~|~t1}}<{{typeof~|~t2}} {{someFunction~|~t3}}>;
Оператор запроса типа
Имя функции
Утилитный тип
Сообщения
Проверить
Показать подсказку

TypeScript: компиляция и запуск

id: 40732_compiler
TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру