TS как вывести массив типов параметров из массива дженериков?

Всем привет!
Я не глубоко знаю TS поэтому застрял с этой проблемой.
есть функция, которая на вход получает массив дженериков, например:
[G<number>, G<string>, G<boolean>]

Джереник G ставит свой первый параметр свойству value
Внутри функции я делаю такое
const values = containers.map(container => container.value)

И получается что values будет иметь тип [number, string, boolean]

Не могу придумать или нагуглить как правильно описать типы такой функции?
Помогите пожалуйста разобраться. Любая помощью и намеки приветствуются =)

function unwrap(containers: G<???>[]): [???] {
return containers.map(container => container.value)
}
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
type ExtractGenerics<T extends readonly unknown[]> = T extends readonly []
  ? []
  : T extends readonly [G<infer V>, ...infer Next]
    ? [V, ...ExtractGenerics<Next>]
    : never;

function unwrap<C extends readonly G<unknown>[]>(containers: C) {
  return containers.map(container => container.value) as ExtractGenerics<C>
}

https://www.typescriptlang.org/play?#code/C4TwDgpg...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы