繁体   English   中英

如何从打字稿中的窗口对象函数获取参数类型

[英]How to get argument types from Window Object functions in Typescript

我想知道如何在打字稿中获取对象窗口每个函数的所有 args 类型。

下面你将看到的是我已经实现的类型,但显然我做错了..

如果有人可以帮助我,我将不胜感激。


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>; 

您的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>; 

打字稿游乐场

最后,要仅获取函数的函数,您可以这样做:

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>>;

打字稿游乐场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM