现在,Typescript在标准库中提供了一个预定义的
Parameters<F>
类型别名,几乎与下面的
ArgumentTypes<>
相同,因此您可以直接使用它,而不是创建自己的类型别名。
type TestParams = Parameters<(a: string, b: number) => void> // [string, number]
然后,要获取例如第二个参数的类型,您可以使用数字索引运算符:
type SecondParam = TestParams[1] // number
原始回答:
是的,现在 TypeScript 3.0 引入了 rest/spread位置中的元组 ,你可以创建一个条件类型来实现这个功能:
type ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never
让我们看看它是否有效:
type TestArguments = ArgumentTypes<typeof test>
看起来不错。请注意,这些强化的元组也可以捕获可选参数和剩余参数:
declare function optionalParams(a: string, b?: number, c?: boolean): void;
type OptionalParamsArgs = ArgumentTypes<typeof optionalParams>;
declare function restParams(a: string, b: number, ...c: boolean[]): void;
type RestParamsArgs = ArgumentTypes<typeof restParams>;
a
中获取string
,从b
中获取number
吗? - creativecreatorormaybenot[string,number]
或类似的结果(可能是元组)。 - ABMagil