(TIL) 2022-03-29

18418 ワード

Optional Chaining


データのロード中に存在しない値をロードしようとすると、エラーが発生し、コードが途中で停止することがあります.
let object = {}
console.log(object.apple) // undefined
console.log(object.apple.price) // TypeError: Cannot read properties of undefined (reading 'price')
以前は、&&のショートカットを使用してnullまたはundefinedを決定していました.したがって,値が存在しなくてもコードは停止せず,コードは無効である.
console.log(object.apple && object.apple.price) // undefined
//좌항(object.apple) 이 null 또는 undefined 라면 undefined 를 반환하고, 그렇지 않으면 우항(object.apple.price) 을 반환한다.
だから導入されたのは「スタイルを変える」"?."前の評価オブジェクトがundefinedまたはnullの場合、評価を停止してundefinedに戻ります.そうしないと、存在値の評価を続行します.
console.log(object.apple.price) // TypeError: Cannot read properties of undefined (reading 'price')
console.log(object.apple?.price) // undefined
https://ko.javascript.info/optional-chaining
  • MVCモードのコントローラでは、コアビジネスロジックに対応する部分(複数のコントローラから入手可能な機能)がサービスとして扱われる.(データベースから直接データをインポートまたは挿入できます)
    開発状況やチームメンバーとの調整によって、この部分はさまざまな変化が発生する可能性があります.

  • きょうけつごう


    1つのクラスに重要な動作を持つ関数(方法)変数をいくつか配置し,コントローラとサービスの直接相関を強い結合として表す.強力な結合の欠点は、コントローラを作成するたびにnew作成者としてサービスが作成され、メモリの無駄になります.新しいアクションを追加すると、コントローラの内部を直接変更する必要があり、メンテナンスが困難になることがよくあります.
    ex)メソッド内に何らかの機能を持つクラスを直接作成する.

  • ルースカップリング


    強い結合状態を改善することによって,各クラスとオブジェクトが相互に依存する部分を減少させる形式を緩和結合と呼ぶ.クラスの内部構造を分割することで、依存メソッドと変数の使用を回避し、コードの再利用性を向上させることができます.これにより、コードの新しい機能を追加または維持しやすくなります.
    ex)外部で生成されたクラスをコンストラクション関数にインポートします.クラス.

  • 依存注入DI-依存注入


    強い結合を緩和結合に変換する方法を依存注入と呼ぶ.

  • せいぎょはんてん


    依存性を注入するように、「依存」に対する制御権は開発者から->フレームワークに移行します.フレームワークでは、この依存性により、メンテナンスが容易に管理されます.これは、開発者が直接制御するのではなく、フレームワークによって定義されたフレームワークに従って制御する必要があることを意味します.
  • 2

    モノトーンモード

    の外部にクラスを作成し、複数の場所で再利用します.モノトーンは依存注入といえるが,依存注入は常にモノトーンと見なすことはできない.
  • NestJS

  • ボイラプレート(初期フォルダ構造)

  • 作成したコードテンプレートは、開発者が簡単な設定作業を実行する必要がないようにします.簡単に言えばテストを行うための環境です.
  •  /src/app.controller.ts
  • //  localhost:3000/ 접속시 실행
    @Get()// <-- "/" 이 생략되어있다. 
      getHello(): string {
        return this.appService.getHello();
      }
    
    //  localhost:3000/shop 접속시 실행
    @Get("/shop")//
      getHello(): string {
        return this.appService.getHello();
      }

  • srcフォルダはAPI単位でグループ化され、各グループにコントローラが1つあります.ts, module.ts, service.3つのtsファイルが作成されます.

  • package.jsonファイルで
  • "dependencies": {
        "@nestjs/common": "^8.0.0",
        "@nestjs/core": "^8.0.0",
        "@nestjs/platform-express": "^8.0.0",
        "reflect-metadata": "^0.1.13",
        "rimraf": "^3.0.2",
        "rxjs": "^7.2.0"
      },
      "devDependencies": {
        "@nestjs/cli": "^8.0.0",
        "@nestjs/schematics": "^8.0.0",
        "@nestjs/testing": "^8.0.0",
        "@types/express": "^4.17.13",
        "@types/jest": "27.4.1",
        "@types/node": "^16.0.0",
        "@types/supertest": "^2.0.11",
        "@typescript-eslint/eslint-plugin": "^5.0.0",
        "@typescript-eslint/parser": "^5.0.0",
        "eslint": "^8.0.1",
        "eslint-config-prettier": "^8.3.0",
        "eslint-plugin-prettier": "^4.0.0",
        "jest": "^27.2.5",
        "prettier": "^2.3.2",
    このように依存関係を区別する.
    devDependencies-開発時のみ必要なパッケージ(ESLing、Prettierなど)に分類し、パッケージをインストールする場合は、ガーゼ[パッケージ]--devを追加してdevDependenciesに分類してインストールできます.
    dependencies-実行時(デプロイ時)に必要なパッケージを分類します.これを取り付けるだけで、糸の取り付け--生産方法があります.
  • ESLintでtsconfigファイルを読み込めない場合は、ここにtsconfig ROOTDERと入力します. 追加します.
  • parserOptions: {
        project: 'tsconfig.json',
        tsconfigRootDir: __dirname,  // <---  이거
        sourceType: 'module',
      },

    Typescript

  • タイプ宣言とタイプ推論
    タイプ説明とは、変数を生成する際に、まずタイプを説明することを意味し、タイプ推論とは、明確なタイプはないが、最初に変数に入った値に基づいてタイプを適用することを意味する.
  • let 타입명시: string = "hello"
    타입명시 = 10  // Type 'number' is not assignable to type 'string'.
    
    let 타입추론 = "hello"
    타입추론 = 10  // Type 'number' is not assignable to type 'string'.
    
    let 타입추론2 = {
      apple: "red",
      banana: "yellow",
      kiwi: "green"
    }
     타입추론2.kiwi = 5   // Type 'string is not assignable to type 'number'.
  •  Typeスクリプトでオブジェクトタイプを定義する場合は、Interfaceというキーワードを使用してタイプを作成します.名前はInterfaceの「I」から取って、慣例に従って一番前に貼ります.
  • Interface IApple{
      name: string;
      color: string;
      myFavorite: boolean;
    }
    
    let apple:IApple = {
      name : "apple",
      color : "red",
      myFavorite: true
    }
    
  • Typescriptでオブジェクトを作成する場合、キーワードの後ろに疑問符を付けます.このプロパティは存在しても、存在しなくても、どちらでも構いません.
  • // 객체타입 
    interface IApple {
        name: string
        color: string
        rate: number | string  //number 일수도 string 일수도
        comment?: string; //물음표를 붙이면 있을 수도 없을 수도 있을 때
    }
    
    let apple: IApple = {
        name: "사과",
        color: "red",
        rate: 5
    }
    apple.rate = "5점"; // IApple 에서 number,string 다 가능하게 했기때문에 이제는 가능해짐
    apple.comment = "사과가 제일 좋아";
    
    console.log(apple)
    /*
    {
      name: '사과',
      color: 'red',
      rate: '5점',
      comment: '사과가 제일 좋아'
    }
    */
      
  •  Typescriptでは,関数がタイプ推論であるはずがない.だから自分で詩を書いてあげるが、最後には値を受け取るタイプを書く.
  • const apple = (name: string, color: string, price: number): string => {
    	return name + color + price   // 결국엔 문자+문자+숫자 이기 때문에 string 으로 받게된다.  
    }
  • decorator
  • function callDecorator(Decorator) {
      console.log("---------");
      console.log(Decorator);
      console.log("---------");
    }
    
    @callDecorator
    class Decorator {}
    
    /*
    ---------
    [class Decorator]
    ---------
    */
  • Private内部参照のみ