Math.trunc의 타입 버전을 구현하라. 그것은 string과 number를 받고 모든 소수점을 없앤 정수 부분을 반환한다
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 NumberString=`${number}`|`${''|number}${`.${number}`|''}`
type Trunc<N extends number|NumberString>=
`${N}` extends `${infer T}.${number}`?
T extends `${number}`?
T
:`${T}0`
:`${N}`
우선 N은 숫자 형태의 문자열 타입만 들어오도록 제한했다.
N의 문자열형 형태에 .이 포함되지 않는다면 N을 문자열 형태로 반환했다(문자열 형태의 값으로 반환하는 것이 문제의 숨겨진 요구사항이다.)
N의 문자열형 형태에 '.'이 포함된다면 한 번 더 분기를 사용한다.
만약 '.' 앞의 문자가 숫자 형태라면 ex)'-1','10' 등
그대로 반환하고,
'.' 앞의 문자가 숫자형태가 아니라면 ex)-, (빈 값)
그 문자 뒤에 0을 붙여 반환한다
괴상한 문제이다.
괜히 '.123','-.32'과 같은 이상한 반례들이 있어 문제 풀이에 방해가 되는 것 같다