https://github.com/type-challenges/type-challenges

위 레포지토리에서 TypeScript에 대한 공부를 할 수 있다.

이때 타입 테스트를 위해서 사용하는 코드들이 있는데 신기해서 기록을 해두려고 한다.

이 유틸리티 타입을 통해 컴파일 타임에서 타입에 대한 체크를 할 수 있다.

🧩 TOC

✨ extends 에 대해 정확히 알아보고 가자

A extends B : type A 가 type B 의 하위 타입인가? 즉, AB 보다 더 구체적인가?

제네릭 타입과 제약조건을 활용한 유틸리티 타입 Expect

type Expect<T extends true> = T;
// 제네릭 타입 T는 반드시 true 타입을 확장하며, 조건 만족 시 T를 그대로 타입으로 반환
type ExpectFalse<T extends false> = T;
// 제네릭 타입 T는 반드시 false 타입을 확장하며, 조건 만족 시 T를 그대로 타입으로 반환

타입 동등성 검사 Equal

//완전히 동일한 제약 조건을 가져야 함.
export type Equal<X, Y> =
	(<T>() => T extends X ? 1 : 2) extends
		(<T>() => T extends Y ? 1 : 2 ) ? true : false;
// any 타입을 제대로 구분하지 못함
type SimpleEqual<X, Y> = X extends Y ? Y extends X ? true : false : false;

type Test1 = SimpleEqual<any, string>;  // true
type Test2 = SimpleEqual<string, any>;  // true