FE/type-challenge
5140. trunc
최토피
2023. 8. 16. 12:00
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
조건
- 입력값이 number 혹은 string
- 소수점 이하 숫자는 모두 버린다.
해설
.
를 찾는다
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