kakasoo

PercentageParser, PlusMinusParser 본문

프로그래밍/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를 만들었다.

반응형