I may have missed something in the docs, but I can't find any way in typescript to get the types of the parameters in a function. That is, I've got a function
function test(a: string, b: number) {
console.log(a);
console.log(b)
}
I want access to the types string
and number
, likely as a tuple.
I know I can get the type of the function itself, as typeof test
, or the return type via ReturnType<test>
.
When I tried keyof typeof test
, it returned never
, which I also couldn't explain.
Other answers like this one point to extends
, but I don't really understand how that works and don't give me an easy way to access the set-of-all-params as a type.
Typescript now comes with a predefined
Parameters<F>
type alias in the standard library which is almost the same asArgumentTypes<>
below, so you can just use that instead of creating your own type alias.Then to get for example the second parameter's type you can use the numeric indexing operator:
Original answer:
Yes, now that TypeScript 3.0 has introduced tuples in rest/spread positions, you can create a conditional type to do this:
Let's see if it works:
Looks good. Note that these beefed-up tuples also capture things like optional parameters and rest parameters: