00002-medium-return-type

Back

type MyReturnType<T> = T extends (...args:any) => infer R ? R : T;

Solution by BangTtagGum #37307

type MyReturnType<T extends (...args: any[]) => any>
  = T extends (...args: any) => infer R
    ? R
    : never;
  1. 函数声明中 (...args: any[]) 一定要写,或者 (...args: never[])

Solution by djdidi #37141

type MyReturnType<T extends (...args: any) => any > = T extends (...args: any) => infer R ? R : never

Solution by lumirelle #37100

type MyReturnType<T extends Function> = T extends (...args: any[]) => infer R ? R : never

Solution by 359Steve #37024

 type MyReturnType<T> = T extends (...args:any[])=>infer R?R:never;

Solution by shujaat-work #36981

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

Solution by HappyCoder211 #36975

// your answers
type MyReturnType<T extends (v: boolean, w: any) => any> = T extends (v: boolean, w: any) => infer R ? R : never;

Solution by AlexBraunMagic #36909

// 你的答案
type MyReturnType<T> = T extends (...args: any[]) => infer X
  ? X extends Function
    ? X
    : X extends (...args: any[]) => any
    ? MyReturnType<X>
    : X
  : never;

Solution by MrSissel #36884

type MyReturnType<T extends (...args: any) => any> = T extends (
  ...args: any
) => infer R ? R : never;

/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'

type cases = [
  Expect<Equal<string, MyReturnType<() => string>>>,
  Expect<Equal<123, MyReturnType<() => 123>>>,
  Expect<Equal<ComplexObject, MyReturnType<() => ComplexObject>>>,
  Expect<Equal<Promise<boolean>, MyReturnType<() => Promise<boolean>>>>,
  Expect<Equal<() => 'foo', MyReturnType<() => () => 'foo'>>>,
  Expect<Equal<1 | 2, MyReturnType<typeof fn>>>,
  Expect<Equal<1 | 2, MyReturnType<typeof fn1>>>,
]

type ComplexObject = {
  a: [12, 'foo']
  bar: 'hello'
  prev(): number
}

const fn = (v: boolean) => v ? 1 : 2
const fn1 = (v: boolean, w: any) => v ? 1 : 2

Solution by AnastasiaSv #36771

type MyReturnType<T> = T extends (...args: any) => infer R ? R : never

Solution by tungulin #36722

type MyReturnType<T extends Function> = T extends (...args: any) => infer R
  ? R
  : never;

Solution by hyeongirlife #36712

// 여기 풀이를 입력하세요
type MyReturnType<T extends Function> = T extends (...args: any) => infer U ? U : never

Solution by seungdeok #36690

type MyReturnType<T> = T extends (...args: any) => infer S ? S : never

Solution by tungulin #36610

type  MyReturnType<T> = T extends (...x: any[]) => infer U ? U : never

Solution by Divcutu #36586

type MyReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : never

Solution by ChemieAi #36559

 type MyReturnType<T> = T extends (...i:any)=>infer R ? R : never

Solution by badri-derakhshan #36522

type MyReturnType<T extends (...args: any[]) => any> = T extends (...args: any[]) => infer R  ? R : never

Solution by HadiMardanian #36516

 type ReturnType<T extends Function> = T extends (arg: boolean) => infer U ? U : never

Solution by shumik323 #36470

type MyReturnType<T> = T extends (...args:any[])=>infer R ? R : never

Solution by alirezaprime #36427

type MyReturnType<T> = T extends (...args:any[])=> infer R ? R :never

Solution by alirezaprime #36424

type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

Solution by alirezaprime #36420

// your answers
type MyReturnType<T extends (...args: any[]) => any> = 
T extends ((...args: any[]) => infer R) ? R : never;

Solution by justBadProgrammer #36395

type MyReturnType<T> = T extends (...args:any) => infer U ? U : never;

Solution by gakki-san #36374

type MyReturnType = T extends (...args: any[]) => infer R ? R : never

Solution by asylbekduldiev #36303

type MyReturnType<T> = T extends (...arg: infer _) => infer R ? R : never

Solution by Maxim-Do #36230

type MyReturnType<T> = T extends (...args: any[]) => infer F ? F : never

Solution by AleksandrShcherbackov #36151

// type MyReturnType<T>  = T extends (...args: any[]) => infer R ? R : never; 

Solution by bnnnnnnnnnnnn #36135

type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

Solution by lidongyun120398 #36095

type MyReturnType<T extends (...args: any[]) => any> = T extends (...args: any) => infer Type ? Type : never

Solution by karazyabko #36035

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

Solution by naruto-823 #35798