클라이언트와 서버 간의 공유 유형
저는 Node.js, Express.js & TypeScript 백엔드(REST API)와 React, Redux & TypeScript 프론트엔드로 프로젝트를 진행하고 있습니다.
백엔드에서 다음과 같은 몇 가지 유형을 만들었습니다.
모델/제품.ts
export type Product = {
title: string
description: string
price: number
}
REST API는 다음과 같은 응답을 보냅니다.
{
"data": [
{"title": "Shoe", "Description": "This is a shoe.", "price": 20},
{...}
] // inside here all the Products[]
}
고객에게 캐스팅하고 싶습니다.data활자에 맞는Product어레이. 하지만 프런트엔드와 백엔드는 코드 기반이 다르고 분리되어 있기 때문에 프론트엔드에서 유형을 사용하는 이점을 활용하고 싶습니다.하지만 저는 코드를 복제하지 않고 이것을 달성하고 싶습니다.그래서 모델을 수정하거나 추가할 때 2곳을 업데이트하고 싶지 않습니다.
클라이언트와 서버 간에 유형을 공유하는 가장 좋은 방법이 무엇인지 아는 사람이 있습니까?
백엔드에 엔드포인트를 생성하여 클라이언트가 타격할 수 있도록 한 다음 모든 모델을 단일 파일에 기록하는 것을 생각하고 있습니다.
models.ts의뢰인의그래서 백엔드의 /models/에 있는 모든 파일을 루프하여 클라이언트에 models.ts로 작성된 새 파일로 구문 분석해야 할 것 같습니다.하지만 이것이 정말 좋은 방법일까요?이 구조를 달성하는 더 나은 방법을 아는 사람이 있습니까?
TypeScript 로 매핑을 사용할 수 있습니다.
제가 작성한 프로젝트의 예:
SampleTypes.ts 내부에 정의된 백엔드 유형은 코드가 중복되지 않도록 클라이언트 프로젝트에서 재사용됩니다.
{
"compilerOptions": {
"paths": { "@backend/*": ["../server/src/api/*"], },
}
}
../server/src/api/-> https://github.com/winwiz1/crisp-react/tree/master/server/src/api
import { SampleRequest } from "@backend/types/SampleTypes";
기본적으로 여러 패키지 간에 코드(사례 유형 정의)를 공유하려고 합니다.Yarn은 이러한 목적을 위해 작업 공간을 개발했으며 다른 답변처럼 tsconfig/Typescript에 의존하지 않습니다.
이것은 토끼굴로 들어가는 것입니다. 당신의 얀 구성과 아마도 Lerna와 같은 도구를 사용하는 약간의 작업을 포함합니다.그러나 유형을 공유하지만 유효성 검사 논리를 공유하는 패키지가 긴밀하게 결합된 경우에는 의미가 있습니다.
이렇게 하는 좋은 방법은 이 공유 유형을 사용하여 ppm 개인 패키지를 만드는 것입니다.이를 활용하여 도우미 기능, 중복되지 않는 논리 등을 공유할 수 있습니다.
https://docs.npmjs.com/creating-and-publishing-private-packages https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html
언급URL : https://stackoverflow.com/questions/65045106/share-types-between-client-and-server
'source' 카테고리의 다른 글
| Angular 2 이미지를 base64로 인코딩 (0) | 2023.06.23 |
|---|---|
| 오류: RPC 실패. curl 92 HTTP/2 스트림 0이 제대로 닫히지 않았습니다. PROTCO_ERROR(err 1) (0) | 2023.06.23 |
| 마스터 분기와 개발 분기 간의 "git pull" 또는 "git merge" (0) | 2023.06.23 |
| 깃 폴더의 크기를 줄일 수 있는 방법이 있습니까? (0) | 2023.06.23 |
| 여러 값이 포함된 MySQL 열을 외부 키로 사용할 수 있습니까? (0) | 2023.06.23 |