【问题标题】:How to get argument types from Window Object functions in Typescript如何从 Typescript 中的窗口对象函数获取参数类型
【发布时间】:2020-06-10 18:39:54
【问题描述】:

我想知道如何在 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>; 

【问题讨论】:

    标签: typescript types args


    【解决方案1】:

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

    【讨论】:

    • 但是如何从窗口对象中提取每个函数的参数类型呢?例如:警报函数有这些类型的参数..
    • 更新了我的答案以反映这一点。您可以使用该类型从那里进行构建。
    • 谢谢,你知道我如何使用console.log()来测试它来查看输出吗?
    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 2022-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多