kakasoo

SnakeCase에서 CamelCase로 리터럴 타입 추론하기 본문

프로그래밍/TypeScript

SnakeCase에서 CamelCase로 리터럴 타입 추론하기

카카수(kakasoo) 2023. 8. 11. 20:36
반응형
type SnakeToCamel<
  Target extends string,
  P extends string[] = Split<Target, "_">
> = Join<{
  [K in keyof P]: K extends "0"
    ? P[K]
    : P[K] extends string
    ? FirstLetterCapitalize<P[K]>
    : "";
}>;

타입 파라미터 Target을 받는다.

이 타입 Target을 _ 문자를 기준으로 Split하면 문자열이 배열의 형태가 되는데, 이를 일단 P에 저장한다.

이제 이 문자열 배열 P를 mapped type을 이용하여 첫번째  문자를 제외한 나머지 문자열들은 첫글자만 대문자로 변경한다.

이렇게 만들어진 문자열 배열을 다시 하나의 문자열이 되게 Join한다.

 

 

 

타입 레벨에서 문자열 Join 구현하기

type ToString= T extends string ? T : never; type ToStringTuple= T extends string[] ? T : never; type Join = T extends [infer F, ...infer Rest] ? `${ToString}${Join}` : ''; 문자열로 이루어진 배열을 받아 Join하는 타입을 구현했다. type

kscodebase.tistory.com

 

문자열을 자르는 Split 타입 구현하기

type Split< Target extends string, Separator extends string = "" > = Target extends `${infer F}${Separator}${infer Rest}` ? [F, ...Split] : Target extends "" ? [] : [Target]; Join과 반대로 문자열을 분리하는 타입. Target이 Separator를 기준

kscodebase.tistory.com

 

FirstLetterCapitalize, 첫 글자를 대문자로 추론하는 리터럴 타입

type FirstLetterCapitalize = Target extends `${infer F}${infer Rest}` ? `${Uppercase}${Rest}` : Target; 문자열의 첫 글자만을 대문자로 변경하는 타입이다.

kscodebase.tistory.com

반응형