> Как типизировать функцию, работающую с массивом промисов с разными типами в TypeScript (TypeScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: IT-One

Стек: TypeScript

> Пример ответа

Для типизации функции, работающей с массивом промисов разных типов, используйте кортеж с вариативными типами (variadic tuple types) и условные типы. Пример:

TYPESCRIPT
type PromiseTuple<T extends any[]> = {
[K in keyof T]: Promise<T[K]>;
};
async function processPromises<T extends any[]>(
promises: PromiseTuple<T>
): Promise<T> {
return Promise.all(promises) as Promise<T>;
}
// Использование:
const result = await processPromises([
Promise.resolve(42),
Promise.resolve("hello"),
Promise.resolve(true),
]);
// result: [number, string, boolean]

Если функция должна обрабатывать промисы последовательно или с трансформацией, используйте обобщённый тип с маппингом:

TYPESCRIPT
async function mapPromises<T extends any[], R>(
promises: PromiseTuple<T>,
mapper: (values: T) => R
): Promise<R> {
const resolved = await Promise.all(promises) as T;
return mapper(resolved);
}

Ключевой момент: PromiseTuple<T> маппит каждый элемент кортежа T в Promise<T[K]>, сохраняя порядок и типы. Это обеспечивает полную типовую безопасность при работе с разнотипными промисами.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью