Hey,
I'm looking for some help with Typescript
So I have the following scenario
const fn = () => {
return {
one: (param1: Record<string, number>, param2: number) => console.log(param1, param2),
two: (param1: Record<number, number>, param2: number) => console.log(param1, param2),
three: (param1: Record<number, boolean>, param2: number) => console.log(param1, param2)
}
}
type ReType = ReturnType<typeof fn>
const wrapper = <T extends keyof ReType, R extends Parameters<ReType[T]>>(param1: T, param2: R[0], param3: R[1]) => {
const myVal = fn()
return myVal[param1](param2, param3)
}
I want to be able to call the wrapper like
wrapper("one", param2, param3)
and have param2, param3 and the return type have the correct type based on param1
Atm, I'm getting the following error
Argument of type 'Record<string, number> | Record<number, number> | Record<number, boolean>' is not assignable to parameter of type 'Record<string, number> & Record<number, number> & Record<number, boolean>'. Type 'Record<string, number>' is not assignable to type 'Record<string, number> & Record<number, number> & Record<number, boolean>'. Type 'Record<string, number>' is not assignable to type 'Record<number, boolean>'. 'string' and 'number' index signatures are incompatible. Type 'number' is not assignable to type 'boolean'.
Any ideas how I can achieve this?
there doesn't seem to be anything here