У меня есть проблема на работе, которую я могу суммировать с этим примером: возможно ли полностью ввести следующую функцию?
function spreadCall(f1, f2) {
const args = f1();
f2(...args);
}
Таким образом, нам нужно, чтобы f2 принимал ровно столько же аргументов (т. Е. Кортеж) с типами в том же порядке, что и результат f1. Я не могу найти способ сделать это - частичное решение, которое я могу придумать, это перечислить несколько чисел аргументов, то есть
type Output<F> =
F extends ()=>[infer A0] ? (a0:A0)=>void :
F extends ()=>[infer A0, infer A1] ? (a0:A0, a1:A1)=>void :
F extends ()=>[infer A0, infer A1, infer A2] ? (a0:A0, a1:A1, a2:A2)=>void :
never;
// enumerate as many number of arguments as desired ^^
function spreadCall<InputF>(f1:InputF, f2:Output<InputF>) {
// ...
}
Есть ли способ сделать это, который обрабатывает любое количество аргументов?