00191-medium-append-argument

Back

// 你的答案
type AppendArgument<F extends Function, U> = F extends (...args: infer R) => infer T
  ? (...args: [...R, U]) => T
  : never;

Solution by 2531800823 #33234

// your answers

type AppendArgument<Fn, A> =
  Fn extends (...args: infer Args) => infer R
    ? (...args: [...Args, A]) => R
    : never

Solution by KeithChou #33197

type AppendArgument<Fn extends Function, A extends unknown> = Fn extends (...args: infer Args) => infer Return
  ? (...args: [...Args, A]) => Return
  : never

Solution by Taneros #33171

// 你的答案
type AppendArgument<Fn extends (...args:any[])=>any, A> = Fn extends (...args:infer Params)=>infer R ? (...args:[...Params,A])=>R:never

Solution by walker-hzx #32939

type AppendArgument<Fn extends Function, A> = Fn extends (...args: infer T) => any ? (...args: [...T, A]) => ReturnType<Fn> : Fn

Solution by ZhipengYang0605 #32821

// 你的答案
type AppendArgument<Fn extends (...args: any) => any, A> = Fn extends (...args: infer R) => infer T ? (...args: [...R, A]) => T : never

Solution by geweidong #32765

type AppendArgument<Fn extends Function, A extends unknown> =
    Fn extends (...args: infer Args) => infer Return
        ? (...args: [...Args, x: A]) => Return
        : never

Solution by ZhulinskiiDanil #32678

type AppendArgument<Fn extends (...args: never[]) => unknown, A> = 
  Fn extends (...args: infer P) => infer R 
    ? (...args: [...P, A]) => R 
    : never

Solution by dev-hobin #32377

type AppendArgument<Fn extends (...args: any[]) => any, A> =
  Fn extends ((...args: infer P) => infer R)
  ? (...args: [...P, A]) => R
  : never

We infer the type of the arguments and append to it the new arg

Solution by joyanedel #32156

// your answers
type AppendArgument<Fn extends (...args:any[]) => any, A> = (...args: [...Parameters<Fn>, A]) => ReturnType<Fn>;

Solution by pea-sys #32039

type AppendArgument<Fn extends (...args: any[]) => any, A> = (...args: [...Parameters<Fn>, A]) => ReturnType<Fn>;

Solution by gasmg #31896

type AppendArgument<Fn extends Function, A> = Fn extends (...args: infer Arg) => infer R ? (...args: [...Arg, A]) => R : never;

Solution by kai-phan #31631

// your answers

type AppendArgument<F extends (...args: any[]) => any, T> = (
  ...args: [...Parameters<F>, x: T]
) => ReturnType<F>;

type AppendArgument<F, T> = F extends (...args: infer A) => infer R
  ? (...args: [...A, x: T]) => R
  : never;

Solution by AhmedRagabKamal #31510

type AppendArgument<Fn extends Function, A> = Fn extends (
  ...args: infer G
) => infer R
  ? (...arg1: [...G, A]) => R
  : never;

Solution by vipulpathak113 #31472

type AppendArgument<Fn extends Function, A> = Fn extends (...arg: infer Arg)=> infer R ? (...arg: [...Arg, A])=> R : Fn;

Solution by eward957 #31237

// Fn extends (...args: infer Args) => infer ReturnType:这里使用条件类型和 infer 关键字来推断原函数的参数类型(Args)和返回类型(ReturnType)。

// (...args: [...Args, A]) => ReturnType:创建了一个新的函数类型,它的参数是原始参数(Args)加上新追加的参数(A),并保持相同的返回类型(ReturnType)。

// never:如果传入的 Func 不是函数类型,结果类型将是 never。
type AppendArgument<Fn, A> = Fn extends (...args: infer Args) => infer ReturnType
  ? (...args: [...Args, A]) => ReturnType
  : never;

Solution by d1zzzzy #31135

type AppendArgument<Fn, A> = Fn extends (...args: infer R) => infer T ? (...args: [...R, A]) => T : never

Solution by MyeonghoonNam #31001

type AppendArgument<Fn, A> = Fn extends (...agrs: [...infer P]) => infer R
  ? (...agrs: [...P, A]) => R
  : never;

Solution by jaeilnet #30578

type AppendArgument<F extends (...args: any[]) => unknown, T> = F extends (...args: infer R) => infer Z ? (...args: [...R, T]) => Z : never

type Fn = (a: number, b: string) => number

type Result = AppendArgument<Fn, boolean>
// expected be (a: number, b: string, x: boolean) => number

Solution by rxMATTEO #30093

type AppendArgument<Fn, T> = Fn extends (...args: infer A) => infer R ? (...args: [...A, T]) => R : never

Solution by 1587315093 #29877

type AppendArgument<Fn extends (...args: any[]) => unknown, A> = (...args: [...Parameters<Fn>, A]) => RerurnType<Fn>

Solution by sv-98-maxin #29846

type AppendArgument<Fn extends (...args: any[]) => unknown, A> = Fn extends (
  ...args: infer TArgs
) => infer TFunc
  ? (...args1: [...TArgs, ...[x: A]]) => TFunc
  : never

Solution by agus-wesly #29747


type AppendArgument<Fn extends Function, A> = Fn extends (...args: infer E) => infer R ? (...args: [...E, A]) => R : never;

type appResult = AppendArgument<(a: number, b: number) => number, boolean>;

const fnn: appResult = (a: number, b: number, c: boolean) => 1;

Solution by sundial-dreams #29438

type AppendArgument<Fn extends (...args: any[]) => any, A>
    = Fn extends (...params: infer P) => infer R
     ? (...params:[...P, A]) => R
    : never

Solution by MohammadArasteh #29392

// 여기 풀이를 입력하세요
type AppendArgument<Fn, A> = Fn extends (...args: infer Args) => infer Return ? (...args: [...Args, A]) => Return : never;

Solution by eodnjs467 #29376

type AppendArgument<Fn, A> = Fn extends (...args: infer U) => infer RT ?  (...args: [...U, A]) => RT: never;

Solution by duynhanf #29355

// 你的答案

type AppendArgument<Fn, A> = Fn extends (...arg:infer P)=>infer K?(...arg:[...P,A])=>K:never

Solution by kangaroona #29324

Solution:

type AppendArgument<Fn extends (...args: any) => any, A> = (...args: [...Parameters<Fn>, A]) => ReturnType<Fn>;

Solution by DmitriiBr #29287

type AppendArgument<Fn, A> = Fn extends (...rest: infer R) => infer Return ? (...rest: [...R, x: A]) => Return : Fn

Solution by Yirujet #29205

type AppendArgument<Fn, A> = Fn extends (...args: infer I) => infer R ? (...args: [...I, A]) => R : never;

Solution by sabercc #29013