Как получить типы аргументов из функций Window Object в Typescript - PullRequest
1 голос
/ 26 февраля 2020

Задача

Привет друзья,

Я хотел бы знать, как я могу в машинописи получить все типы аргументов каждой функции окна объекта.

Ниже вы увидите тип, который я реализовал, но, очевидно, я делаю это неправильно ..

Если кто-то может мне помочь, я буду признателен.


type Arguments<F extends Function> = F extends (...args: infer A) => any ? A : never;

const x = (window: Window) => window.alert('hola')
type TestArguments = Arguments<typeof x>; 

1 Ответ

0 голосов
/ 26 февраля 2020

Ваша переменная 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...