[プロジェクト]client-serverはリクエスト/レスポンスタイプをどのように共有しますか?

2903 ワード

現在のタイトルを解決するには、次の手順に従います.
何度もプロジェクトを覆す。 タイプスクリプトの正式なドキュメントを見ました。 typescript-express-starter構造解析も行った。 mono-repoにもgooglingをしたことがあります。

結局、私が完璧に体現したい形態を持つ報告書が見つからなかった.
知っているだけtypescript-express-starter最近
私が解決したいのは
  • クライアントはサーバに要求を送信し、応答を受信する過程でtype情報を双方で共有するため
  • 一方が送信するデータ形態が変化すると他方がエラーを吐く
  • 形を表したい.

    この形を思いついた。

    
    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;
    
    このようにして、各リクエスト/レスポンスのタイプ情報が格納される.
    そこで、serverclient双方が通信する前のタイプ情報を使ってタイプ体Kingをしてみましょう!
    ちなみにtypescript-epress-starterはあるライブラリを使用します。 class-validator typeORMのentityの書き方と似ているように見えるので使いやすいように見えます。 import { IsEmail, IsString } from 'class-validator'; export class CreateUserDto { @IsEmail() public email: string; @IsString() public password: string; } このようにしてチェックするタイプを定義すればいいです。