Ваша переменная TestArguments
- это массив аргументов (даже во множественном числе). Вам необходимо:
получить доступ к первому элементу:
type Arguments<F extends Function> = F extends (...args: infer A) => any ? A : never;
const x = (window: Window) => window.alert('hola')
type TestArgument = Arguments<typeof x>[0];
или infer
только к первому аргументу.
type FirstArgument<F extends Function> = F extends (firstArg: infer A) => any ? A : never;
const x = (window: Window) => window.alert('hola')
type TestArgument = FirstArgument<typeof x>;
TypeScript Playground
Наконец, чтобы получить только функции вашей функции, вы должны сделать это:
type OnlyFunctions<T> = Pick<T, { [k in keyof T]: T[k] extends Function ? k : never }[keyof T]>
Это в основном отображается через объект Window
, устанавливая never
в переменные, которые не функции. Затем получите ключи этого массива и используйте его для создания нового массива (используя Pick), который имеет только эти ключи.
Вы можете комбинировать все, используя:
type OnlyFunctionsFromFirstArgument = OnlyFunctions<FirstArgument<typeof x>>;
TypeScript Playground