DEV Community

Discussion on: Advanced TypeScript Exercises - Question 4

Collapse
 
jrumandal profile image
John Ralph Umandal • Edited
// lets say we have some function type
type SomeF = (a: number, b: string) => number;
// and we have our utility type
type AppendArgument<F, A> =
    F extends (...[a, b, ...oth]: [infer ArgA, infer ArgB, infer ArgOth]) => infer FReturn
    ? (x: A, ...[a, b, ...oth]: [ArgA, ArgB, ArgOth]) => FReturn
    : unknown;

type FinalF = AppendArgument<SomeF, boolean> 
// FinalF should be (x: boolean, a: number, b: string) => number

I wasn't able to figure out myself how to dynamically take the pair arg:type out from a generic type function :(

UPDATE: palmface

// lets say we have some function type
type SomeF = (a: number, b: string) => number;
// and we have our utility type
type AppendArgument<F, A> =
    F extends (...args: infer Args) => infer FReturn
    ? (x: A, ...args: Args) => FReturn
    : unknown;

type FinalF = AppendArgument<SomeF, boolean> 
// FinalF should be (x: boolean, a: number, b: string) => number