(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 開発状況やチームメンバーとの調整によって、この部分はさまざまな変化が発生する可能性があります.
きょうけつごう
1つのクラスに重要な動作を持つ関数(方法)変数をいくつか配置し,コントローラとサービスの直接相関を強い結合として表す.強力な結合の欠点は、コントローラを作成するたびにnew作成者としてサービスが作成され、メモリの無駄になります.新しいアクションを追加すると、コントローラの内部を直接変更する必要があり、メンテナンスが困難になることがよくあります.
ex)メソッド内に何らかの機能を持つクラスを直接作成する.
ルースカップリング
強い結合状態を改善することによって,各クラスとオブジェクトが相互に依存する部分を減少させる形式を緩和結合と呼ぶ.クラスの内部構造を分割することで、依存メソッドと変数の使用を回避し、コードの再利用性を向上させることができます.これにより、コードの新しい機能を追加または維持しやすくなります.
ex)外部で生成されたクラスをコンストラクション関数にインポートします.クラス.
依存注入DI-依存注入
強い結合を緩和結合に変換する方法を依存注入と呼ぶ.
せいぎょはんてん
依存性を注入するように、「依存」に対する制御権は開発者から->フレームワークに移行します.フレームワークでは、この依存性により、メンテナンスが容易に管理されます.これは、開発者が直接制御するのではなく、フレームワークによって定義されたフレームワークに従って制御する必要があることを意味します.
モノトーンモード
の外部にクラスを作成し、複数の場所で再利用します.モノトーンは依存注入といえるが,依存注入は常にモノトーンと見なすことはできない.NestJS
ボイラプレート(初期フォルダ構造)
// 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-実行時(デプロイ時)に必要なパッケージを分類します.これを取り付けるだけで、糸の取り付け--生産方法があります.
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'.
Interface IApple{
name: string;
color: string;
myFavorite: boolean;
}
let apple:IApple = {
name : "apple",
color : "red",
myFavorite: true
}
// 객체타입
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: '사과가 제일 좋아'
}
*/
const apple = (name: string, color: string, price: number): string => {
return name + color + price // 결국엔 문자+문자+숫자 이기 때문에 string 으로 받게된다.
}
function callDecorator(Decorator) {
console.log("---------");
console.log(Decorator);
console.log("---------");
}
@callDecorator
class Decorator {}
/*
---------
[class Decorator]
---------
*/
Reference
この問題について((TIL) 2022-03-29), 我々は、より多くの情報をここで見つけました https://velog.io/@sunghwancode/TIL-2022-03-29テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol