현재 제목을 해결하기 위해
- 여러 번 프로젝트를 뒤엎고
- 타입스크립트 공식문서를 보았고
- typescript-express-starter 구조 분석도 해보았다.
- mono-repo에 대해 구글링도 해보았다.
결국 완벽하게 내가 구현하고자 하는 형태를 갖고 있는 레퍼런스는 찾지 못했다.
다만, typescript-express-starter
가 가장 가까운 것을 알 수 있었다.
내가 해결하고자 했던 것은
형태를 구현하고 싶었다.
wo
├─ package.json
├─ packages
│ ├─ client
│ │ ├─ next-env.d.ts
│ │ ├─ package.json
│ │ ├─ pages
│ │ │ └─ index.tsx
│ │ ├─ tsconfig.json
│ │ └─ yarn.lock
│ ├─ server
│ │ ├─ ormconfig.js
│ │ ├─ package.json
│ │ ├─ src
│ │ │ ├─ app.ts
│ │ │ ├─ controllers
│ │ │ ├─ entity
│ │ │ ├─ factories
│ │ │ ├─ interfaces
│ │ │ │ └─ index.ts
│ │ │ ├─ routes
│ │ │ ├─ seeds
│ │ │ ├─ server.ts
│ │ │ └─ utils
│ │ ├─ tsconfig.json
│ │ └─ yarn.lock
│ └─ shared <----
│ └─ types
│ ├─ exercise
│ │ └─ response.ts
│ ├─ post
│ │ ├─ request.ts
│ │ └─ response.ts
│ ├─ program
│ │ ├─ request.ts
│ │ └─ response.ts
│ ├─ record
│ │ ├─ request.ts
│ │ └─ response.ts
│ ├─ request.ts
│ └─ user
├─ tsconfig.json
└─ yarn.lock
여기 안에
// record/request.ts
export interface CreateRecord {
weight: number;
reps: number;
}
// record/response.ts
import Record from '@model/Record.entity';
export type CreateRecord = Record;
export type DeleteRecord = number;
이런 식으로 각 요청/응답의 타입정보를 저장해두었다.
따라서 server
, client
양쪽에서 통신 전 이 타입정보를 가지고 타입체킹을 해보자!!
참고로 typescript-epress-starter에는 어떤 라이브러리를 사용한다.
class-validator
typeORM의 entity 작성방식과 비슷해보여서 사용하기 쉬워보인다.
import { IsEmail, IsString } from 'class-validator'; export class CreateUserDto { @IsEmail() public email: string; @IsString() public password: string; }
이런 식으로 체크할 타입을 정의해놓으면 된다.