🫧 문제
Implement the Absolute type. A type that take string, number or bigint. The output should be a positive number string
type Test = -100;
type Result = Absolute<Test>; // expected to be "100"
🛠️ 테스트 케이스
type cases = [
Expect<Equal<Absolute<0>, '0'>>,
Expect<Equal<Absolute<-0>, '0'>>,
Expect<Equal<Absolute<10>, '10'>>,
Expect<Equal<Absolute<-5>, '5'>>,
Expect<Equal<Absolute<'0'>, '0'>>,
Expect<Equal<Absolute<'-0'>, '0'>>,
Expect<Equal<Absolute<'10'>, '10'>>,
Expect<Equal<Absolute<'-5'>, '5'>>,
Expect<Equal<Absolute<-1_000_000n>, '1000000'>>,
Expect<Equal<Absolute<9_999n>, '9999'>>,
]
🎱 정답
type Absolute<T extends number | string | bigint> = `${T}` extends `-${infer U}` ? U : `${T}`
💭 해설
타입 Absolute<T>
는 조건부 타입으로, 입력된 제네릭 타입 T
가 number
, string
, 또는 bigint
중 하나인지 확인합니다. 그리고 문자열 리터럴 타입을 사용하여 입력된 T
타입을 문자열로 변환합니다.
Absolute<-1_000_000n>
를 입력했을 때, -1_000_000n
은 bigint
타입입니다. 타입은 -
와 정수 사이에 _
를 포함한 문자열입니다. 조건부 타입은 이 문자열을 분석하고, -
로 시작하는지 여부를 확인합니다.
1_000_000n
은 ``로 시작하기 때문에 조건부 타입에서 `` 다음의 문자열인1_000_000n
을 추출합니다. 그리고 이 문자열을 다시 타입으로 변환하여 반환합니다. 문자열로 변환된 결과가1000000
이 됩니다.