🩻타입 컨벤션

타입을 정의하는 규칙에 대해 작성한 문서

/**
 * + 책 유형
 *   1. `thriller`: 스릴러
 *   2. `mystery`: 추리소설
 *   3. `romance`: 로맨스 소설
 *   4. `horror`: 공포 소설
 *   5. `fantasy`: 판타지 소설
 */
export type TBookType = 'thriller' | 'mystery' | 'romance' | 'horror' | 'fantasy';

/** 책의 스키마 타입 */
export interface IBook {
  /** 식별자 */
  id: number;
  /** 제목 */
  title: string;
  /** 작가 */
  author: string;
  /** 책 유형 */
  type: TBookType;
}

🎈 접두사

컴포넌트와 이름이 충돌날 수 있기 때문에 IT를 접두사로 사용한다.

📖 TSDoc

TSDoc으로 작성해두면 사용하는 곳에서 마우스를 올리면 주석이 나타납니다.

TSDoc을 반드시 작성한다.

지금 예시는 너무 간단하고 직관적이라 설명이 없어도 이해할 수 있지만, 실제로 사용하다보면 영단어 하나로 설명하기 힘든 값이거나 개발을 진행한 당자사를 제외하고 이해하기 힘든 값일 수 있기 때문에 모든 타입에는 TSDoc을 사용한다.

굳이 타입에 TSDoc을 작성하는 이유는 타입에 작성해두면 타입을 사용하는 변수에도 적용되기 때문에 한 번 제대로 작성해두면 이후에 사용할때와 유지보수 혹은 타인이 수정할때 보기좋은 문서가 된다.

특히 enum형태는 반드시 작성해두는게 좋다. 미래의 본인도 이 값들이 어떤 역할인지 모르는 경우가 많다.

📦 API 타입

만약 원본 타입이 존재하는 경우 유틸리티 함수를 활용하고, 원본 타입이 없다면 길어져도 하나씩 직접 작성한다. ( 원본 타입이란 DB의 모델, 스키마에 대한 타입 )

API 타입은 따로 타입만을 관리하기 위한 파일로 분리하지 않고 API 요청 함수 바로 위에 사용한다.

0️⃣ 요청 타입

예외 없이 body, params, queries로 구분해서 값을 받는다. 그리고 접미사로 반드시 APIRequest를 사용한다.

1️⃣ 응답 타입

접미사로 반드시 APIResponse를 사용한다.

🗂️ 타입 정의 위치

개인적으로 타입은 사용하는곳 바로 위에 작성하는게 좋은 것 같다. 과거에는 /apis/book.ts, /types/book.ts 이런식으로 분리해서 관리했는데 규모가 조금이라도 커지면 각각의 위치를 찾는게 더 힘들어지는 경험을 했다. 그래서 공용으로 사용하는 타입이 아니라면 코드가 길어지더라도 사용하는곳 바로 위에 사용하는게 좋다고 생각한다.

Last updated