본문 바로가기

FE/type-challenge

5140. trunc

728x90

문제

Implement the type version of Math.trunc, which takes string or number and returns the integer part of a number by removing any fractional digits.

type A = Trunc<12.34> // 12

cases

type cases = [
  Expect<Equal<Trunc<0.1>, '0'>>,
  Expect<Equal<Trunc<1.234>, '1'>>,
  Expect<Equal<Trunc<12.345>, '12'>>,
  Expect<Equal<Trunc<-5.1>, '-5'>>,
  Expect<Equal<Trunc<'1.234'>, '1'>>,
  Expect<Equal<Trunc<'-10.234'>, '-10'>>,
  Expect<Equal<Trunc<10>, '10'>>,
]

문제 링크

풀이

정답

type Trunc<T extends number | string> =
    `${T}` extends `${infer F}${infer Rest}`
      ? F extends '.'
        ? ''
        : `${F}${Trunc<Rest>}`
      : T

조건

  1. 입력값이 number 혹은 string
  1. 소수점 이하 숫자는 모두 버린다.

해설

.를 찾는다

type Trunc<T extends number> =
    `${T}` extends `${infer F}${infer Rest}`
      ? F extends '.'
        ? any
        : any
      : T

재귀적으로 검사하는 로직을 추가한다. 이 때 입력으로 string도 추가해준다.

type Trunc<T extends number | string> =
    `${T}` extends `${infer F}${infer Rest}`
      ? F extends '.'
        ? ''
        : `${F}${Trunc<Rest>}`
      : T

혹시 오류나 개선사항이 있다면 댓글 부탁드립니다 :)

728x90

'FE > type-challenge' 카테고리의 다른 글

5310. Join  (0) 2023.08.18
5153. IndexOf  (0) 2023.08.17
5117. Without  (0) 2023.08.15
4803. TrimRight  (0) 2023.08.14
4484. IsTuple  (0) 2023.08.08