Это не совсем то, о чем вы просили, но мне интересно, решит ли это вашу проблему другим способом.
type FuncInAndOuts<T> = T extends ((...input: infer P) => infer R) ? [P, R] : never;
Учитывая функцию в качестве параметра типа T
, FuncInAndOuts<T>
возвращает tuple [P, R]
, где P - массив всех входных данных T
, а R
- тип возвращаемого значения функции.
Например, для данных двух функций
// convert a number to a string
const stringify = (n: number) => '' + n
// convert n to a string and concatenate with str
const stringifyTwo = (n: number, str: string) => '' + n + str
FuncInAndOuts
возвращает эти описания своих входов и выходов
type Stringify = FuncInAndOuts<typeof stringify>
// type Stringify = [[number], string]
type StringifyTwo = FuncInAndOuts<typeof stringifyTwo>
// type StringifyTwo = [[number, string], string]
Помогает ли это вам достичь того, чего вы хотите?