diff --git a/dist/app.js b/dist/app.js
index fa5b1c1..1744025 100644
--- a/dist/app.js
+++ b/dist/app.js
@@ -1,31 +1,10 @@
"use strict";
-var Department = /** @class */ (function () {
- // readonly는 프로퍼티를 초기화한 후 수정할 수 없다. 즉, 한번 할당 되면 변경되면 안되는 고유 번호들을 설정할 때 readonly를 사용한다.
- function Department(id, name) {
- this.id = id;
- this.name = name;
- // private id: string;
- // private name: string;
- this.employees = [];
- // this.id = id;
- // this.name = n
- }
- Department.prototype.describe = function () {
- console.log("Department (".concat(this.id, "): ").concat(this.name));
- };
- Department.prototype.addEmployee = function (employee) {
- // this.id = '2'; // readonly이기 때문에 error가 발생한다.
- this.employees.push(employee);
- };
- Department.prototype.printEmployeeInformation = function () {
- console.log(this.employees.length);
- console.log(this.employees);
- };
- return Department;
-}());
-var accounting = new Department('1', 'Accounting');
-accounting.addEmployee('Max');
-accounting.addEmployee('Manu');
-// accounting.employees[2] = 'Anna';
-accounting.describe();
-accounting.printEmployeeInformation();
+function merge(objA, objB) {
+ return Object.assign({}, objA, objB);
+}
+// 1. 여기서 두번째 인자에 일반 `30`을 넣으면 객체로 접근을 할 수 없을 뿐 아무런 에러가 발생하지 않는다. 우리가 의도한건 object임을 준수 해야하는 것이다.
+// 2. 이를 해결하기 위해서는 제네릭의 선언 방식을 변경해야 한다.
+const mergeObj = merge({ name: 'Max', hobbies: ['Sports'] }, 30); // 1. error가 발생하지 않는다. 2. extends를 사용함으로 error 발생 확인
+// const mergeObj = merge({ name: 'Max', hobbies: ['Sports'] }, { age: 30 });
+const mergeObj2 = merge({ name: 'Max' }, { age: 30 });
+console.log(mergeObj.name);
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..e2da7ca
--- /dev/null
+++ b/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ Document
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app.ts b/src/app.ts
index d8a50ee..a9fa66f 100644
--- a/src/app.ts
+++ b/src/app.ts
@@ -1,83 +1,13 @@
-class Department {
- // private id: string;
- // private name: string;
- private employees: string[] = [];
- // readonly는 프로퍼티를 초기화한 후 수정할 수 없다. 즉, 한번 할당 되면 변경되면 안되는 고유 번호들을 설정할 때 readonly를 사용한다.
- constructor(private readonly id: string, public name: string) {
- // this.id = id;
- // this.name = n
- }
- describe(this: Department) {
- console.log(`Department (${this.id}): ${this.name}`);
- }
-
- addEmployee(employee: string) {
- // this.id = '2'; // readonly이기 때문에 error가 발생한다.
- this.employees.push(employee);
- }
-
- printEmployeeInformation() {
- console.log(this.employees.length);
- console.log(this.employees);
- }
-}
-
-class ITDepartment extends Department {
- admins: string[];
- constructor(id: string, admins: string[]) {
- super(id, 'IT');
- this.admins = admins;
- }
+function merge(objA: T, objB: U): T & U {
+ return Object.assign({}, objA, objB);
}
-class AccountingDepartment extends Department {
- private lastReport: string;
-
- get mostRecentReport() {
- if (this.lastReport) {
- return this.lastReport;
- }
- throw new Error('No report found.');
- }
-
- set setMostRecentReport(value: string) {
- if (!value) {
- throw new Error('Please pass in a valid value!')
- }
- this.addReport(value);
- this.lastReport = value; // 여기서 lastReport를 업데이트 그래야 lastReport가 비어있지 않기 때문에 정상적으로 동작을 한다.
- }
-
- constructor(id: string, private reports: string[]) {
- super(id, 'Account');
- //strictPropertyInitialization 활성화로 초기화 해줘야 함.
- this.lastReport = reports[0] || ""; // 초기값을 할당 (reports가 비어있으면 빈 문자열)
- }
-
- addReport(text: string) {
- this.reports.push(text);
- }
-
- printReports() {
- console.log(this.reports);
- }
-}
-const accounting = new Department('1', 'Accounting');
-const ITaccounting = new ITDepartment('2', ['Max']);
-
-ITaccounting.addEmployee('Max');
-ITaccounting.addEmployee('Manu');
-
-// accounting.employees[2] = 'Anna';
-ITaccounting.describe();
-ITaccounting.printEmployeeInformation();
-
-const NewAccounting = new AccountingDepartment('d2', []);
+// 1. 여기서 두번째 인자에 일반 `30`을 넣으면 객체로 접근을 할 수 없을 뿐 아무런 에러가 발생하지 않는다. 우리가 의도한건 object임을 준수 해야하는 것이다.
+// 2. 이를 해결하기 위해서는 제네릭의 선언 방식을 변경해야 한다.
+const mergeObj = merge({ name: 'Max', hobbies: ['Sports'] }, 30); // 1. error가 발생하지 않는다. 2. extends를 사용함으로 error 발생 확인
+// const mergeObj = merge({ name: 'Max', hobbies: ['Sports'] }, { age: 30 });
-// console.log(NewAccounting.mostRecentReport); //report가 추가되지 않아서 Error
-NewAccounting.setMostRecentReport = 'Year End Report';
-NewAccounting.addReport('Something went wrong...');
-console.log(NewAccounting.mostRecentReport); //report가 있어서 문제없이 출력
+const mergeObj2 = merge({ name: 'Max' }, { age: 30 });
-NewAccounting.printReports();
+console.log(mergeObj.name);
\ No newline at end of file