프로그래밍/TypeScript
PercentageParser, PlusMinusParser
카카수(kakasoo)
2023. 4. 3. 23:47
반응형
type Case0 = ['', '', '']
type Case1 = ['+', '', '']
type Case2 = ['+', '1', '']
type Case3 = ['+', '100', '']
type Case4 = ['+', '100', '%']
type Case5 = ['', '100', '%']
type Case6 = ['-', '100', '%']
type Case7 = ['-', '100', '']
type Case8 = ['-', '1', '']
type Case9 = ['', '', '%']
type Case10 = ['', '1', '']
type Case11 = ['', '100', '']
플러스, 마이너스 부호와 숫자, 그리고 퍼센테이지로 이루어진 문자열을 각각의 의미에 맞게 토크나이저하는 타입을 만들어야 한다.
type PlusMinusParser<T extends string> =
T extends `${infer F}${infer R}` ?
F extends '+' | '-' ?
[F, R] :
['', T] :
['', ''];
type PercentageParser <A extends string> =
PlusMinusParser<A> extends [infer F, infer S] ?
S extends `${infer N}%` ?
[F, N, '%'] :
[F, S, ''] :
PlusMinusParser<A>;
한 번에 작성하면 복잡하기 때문에 일단 플러스 마이너스와 숫자+퍼센테이지, 두 영역으로 나누는 PlusMinusParser를 만들고
그 다음 두 번째 인자에서 퍼센테이지를 분리할 수 있도록 하는 분기를 추가로 작성한 PercentageParser를 만들었다.
반응형