Ver código fonte

9.6: generic interfaces and classes.

Frederic G. MARAND 5 anos atrás
pai
commit
497ed8fc28
3 arquivos alterados com 39 adições e 3 exclusões
  1. 9 2
      app/app.ts
  2. 19 1
      app/classes.ts
  3. 11 0
      app/interfaces.ts

+ 9 - 2
app/app.ts

@@ -1,6 +1,6 @@
 import {Book, Librarian, Logger as DamageLogger} from './interfaces';
 import {Category} from './enums';
-import {ReferenceItem, UniversityLibrarian} from './classes';
+import {Catalog, ReferenceItem, UniversityLibrarian} from './classes';
 import {
   CalculateLateFees as CalcFee,
   MaxBooksAllowed, Purge
@@ -260,8 +260,15 @@ function purgedemo() {
   console.log(purgedNums);
 }
 
+function genericClassDemo() {
+  let cat = new Catalog<Book>();
+  let books = GetAllBooks();
+  cat.addItem(books[0]);
+}
+
 false && bookDemo();
 false && classDemo();
 false && importDemo();
 false && genericFunctionDemo();
-purgedemo();
+false && purgedemo();
+false && genericClassDemo();

+ 19 - 1
app/classes.ts

@@ -1,4 +1,5 @@
 import * as I from './interfaces';
+import {Inventory} from "./interfaces";
 
 class UniversityLibrarian implements I.Librarian {
   department: string;
@@ -45,4 +46,21 @@ class Journal extends ReferenceItem {
   }
 }
 
-export { Journal, ReferenceItem, UniversityLibrarian };
+class Catalog<T> implements Inventory<T> {
+  private catalogItems = new Array<T>();
+
+  addItem(newItem: T): void {
+    this.catalogItems.push(newItem);
+  }
+
+  getAllItems(): Array<T> {
+    return this.catalogItems;
+  }
+
+  getNewestItem(): T {
+    return this.catalogItems.slice(-1)[0];
+  }
+
+}
+
+export { Catalog, Journal, ReferenceItem, UniversityLibrarian };

+ 11 - 0
app/interfaces.ts

@@ -29,9 +29,20 @@ interface Librarian extends Person {
   assistCustomer: (custName: string) => void,
 }
 
+interface Inventory<T> {
+  getNewestItem: () => T;
+  addItem: (newItem: T) => void;
+  getAllItems: () => Array<T>;
+}
+
+// let bookInventory: Inventory<Book>;
+// (snip...populate bookInventory)
+// let allBooks: Books = bookInventory.getAllItems();
+
 export {
   Author,
   Book,
   DamageLogger as Logger,
+  Inventory,
   Librarian,
 }