01. Absolute

문제 & 해설 링크

문제

Implement the Absolute type. A type that take string, number or bigint. The output should be a positive number string.

For example:

type Test = -100;
type Result = Absolute<Test>; // expected to be "100"

풀이

문제를 봤을 때 풀지 못했다ㅜ... 해설을 보면 굉장히 쉬운 방법으로 문제를 풀어간다. 해설을 따라가보자.

// 0. 시작
type Absolute<T extends number | string | bigint> = xx;

// 1. T 값이 -를 포함하는 문자열인지 확인한다.
// infer 추론을 사용하는거에 주의하자
type Absolute<T extends number | string | bigint> = T extends `-${infer N}` ? xx : xx;

// 2. 만약 -N 을 extends 하면 ..
// 이렇게 하면 에러가 난다. 왜? 리턴값이 string 이어야하는데
// T 가 number인 경우에 에러가 날 수 있음
type Absolute<T extends number | string | bigint> = T extends `-${infer N}` ? T : N;

// 3. T를 템플릿 문법으로 문자열로 만들어준다.
// 하지만 이렇게 해도 에러가 생기는데 -숫자 인 경우에 처리를 해주지 않았기 때문이다.
type Absolute<T extends number | string | bigint> = T extends `-${infer N}` ? `${T}` : N;

// 4. 마지막으로 한번 더 템플릿 문법을 사용해준다.
type Absolute<T extends number | string | bigint> = `${T}` extends `-${infer N}` ? `${T}` : N;

Last updated