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
'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 |