<aside> 🧵 한눈에 보는 타입스크립트 - HEROPY Tech(링크) 참고하여 개념 정리 🙂

</aside>

<aside> 💎 타입스크립트 입문 - 기초부터 실전까지(링크) 훑어보며 개념 복기 + 실전 예제 적용

</aside>

<aside> 🧞‍♂️ 실전 프로젝트로 배우는 타입스크립트 - 실전 적용 사례

</aside>

<aside> 🦋 타입스크립트 올인원 : 기본 문법편 + 실전 분석편

</aside>

type Union<T> = T extends { a: () => infer U; b: () => infer U } ? U : never;
type Result1 = Union<{ a: () => 1 | 2; b: () => 2 | 3 }>; //
type Intersection<T> = T extends { a: (pa: infer U) => void; b: (pb: infer U) => void } ? U : never;
type Result2 = Intersection<{ a: (pa: 1 | 2) => void; b: (pb: 2 | 3) => void }>; //

type IsNever<T> = [T] extends [never] ? true : false;
type A1 = IsNever<never>; // true
type A2 = IsNever<boolean>; // false

interface VO {
  value: any;
}

const returnVO = <T extends VO>(): T => {
  return { value: "test" };
};

function onlyBoolean<T extends boolean>(value: T = false): T {
  return value;
}

onlyBoolean("hi");
onlyBoolean(false);

function double<T extends [T] extends [string] ? string : number>(x: T): [T] extends [string] ? string : number {
  return x;
}

double("hi");
double("123");