> Как типизировать функцию, работающую с массивом промисов с разными типами в TypeScript (TypeScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: IT-One
Стек: TypeScript
> Пример ответа
Для типизации функции, работающей с массивом промисов разных типов, используйте кортеж с вариативными типами (variadic tuple types) и условные типы. Пример:
TYPESCRIPTtype 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]
Если функция должна обрабатывать промисы последовательно или с трансформацией, используйте обобщённый тип с маппингом:
TYPESCRIPTasync 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]>, сохраняя порядок и типы. Это обеспечивает полную типовую безопасность при работе с разнотипными промисами.
> Похожие задачи по frontend
Что такое utility types в TypeScript, например Partial и DeepPartial
Как реализовать функцию getProperty с типизацией в TypeScript, которая возвращает значение по ключу объекта?
Можно ли создать константу с несуществующим типом в TypeScript?
Что такое TypeScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью