我可能在文档中遗漏了一些内容,但是我无法在typescript中找到任何方法来获取函数中的参数类型.也就是说,我有一个功能
function test(a: string, b: number) {
console.log(a);
console.log(b)
}
Run Code Online (Sandbox Code Playgroud)
我想要访问类型,string并number可能作为元组.
我知道我可以获得函数本身的类型typeof test,或者返回类型via ReturnType<test>.
当我尝试时keyof typeof test,它又回来了never,我也无法解释.
像这样的其他答案指出extends,但我真的不明白它是如何工作的,并没有给我一个简单的方法来访问作为一种类型的所有参数集.
jca*_*alz 72
是的,既然TypeScript 3.0 在休息/传播位置引入了元组,您可以创建一个条件类型来执行此操作:
type TestParams = Parameters<(a: string, b: number) => void> // [string, number]
Run Code Online (Sandbox Code Playgroud)
让我们看看它是否有效:
type ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;
Run Code Online (Sandbox Code Playgroud)
看起来不错.请注意,这些增强的元组还捕获可选参数和休息参数等内容:
type TestArguments = ArgumentTypes<typeof test>; // [string, number]
Run Code Online (Sandbox Code Playgroud)
更新:事实上,标准库中有一个预定义的Parameters<F>类型别名,几乎与之相同ArgumentTypes<>,因此您可以使用它而不是创建自己的类型别名.
希望有所帮助.祝好运!
| 归档时间: |
|
| 查看次数: |
18035 次 |
| 最近记录: |