1. Generic

let poetryBooks: Book[];
let fictionBooks: Array<Book> = [
  {
    id: 10,
    title: 'The C Programming Language',
    author: 'K & R',
    available: true,
    category: Category.Software,
  },
  {
    id: 11,
    title: 'Code Complete',
    author: 'Steve McConnell',
    available: true,
    category: Category.Software,
  },
];
let historyBooks = new Array<Book>(5);

generic functions:

function logAndReturn<T>(thing: T): T {
  console.log(thing);
  return thing;
}
let someString: string = logAndReturn<string>('log this');

let newMag: Magazine = { title: 'Web DevMonthly' };
let someMag: Magazine = logAndReturn<Magazine>(newMag);

generic interfaces:

interface Inventory<T> {
  getNewestItem: () => T;
  addItem: (newItem: T) => void;
  getAllItems: () => Array<T>;
}
let bookInventory: Inventory<Book> = something; // populate the inventory here...
let allBooks: Array<Book> = bookInventory.getAllItems();

generic class:

class Catalog<T> implements Inventory<T> {
  private catalogItems = new Array<T>();

  addItem(newItem: T) {
    this.catalogItems.push(newItem);
  }

  // implement other interface methods here
}
let bookCatalog = new Catalog<Book>();

generic constraint:

interface CatalogItem {
  catalogNumber: number;
}
class Catalog<T extends CatalogItem> implements Inventory<T> {
  // implement interface methods here
}
interface ShelfItem {
  title: string;
}

export default class Shelf<T extends ShelfItem> {
  private _items: Array<T> = new Array<T>();

  add(item: T): void {
    this._items.push(item);
  }

  getFirst(): T {
    return this._items[0];
  }

  find(title: string): T {
    return this._items.find((item) => item.title === title);
  }

  printTitles(): void {
    this._items.forEach((item) => console.log(item.title));
  }
}

let inventory: Array<Book> = [
  {
    id: 10,
    title: 'The C Programming Language',
    author: 'K & R',
    available: true,
    category: Category.Software,
  },
  {
    id: 11,
    title: 'Code Complete',
    author: 'Steve McConnell',
    available: true,
    category: Category.Software,
  },
];
let bookShelf: Shelf<Book> = new Shelf<Book>();
inventory.forEach((book) => bookShelf.add(book));
let firstBook: Book = bookShelf.getFirst();

let magazines: Array<Magazine> = [
  { title: 'Programming Language Monthly', publisher: 'Code Mags' },
  { title: 'Literary Fiction Quarterly', publisher: 'College Press' },
  { title: 'Five Points', publisher: 'GSU' },
];
let magazineShelf: Shelf<Magazine> = new Shelf<Magazine>();
magazines.forEach((mag) => magazineShelf.add(mag));
magazineShelf.printTitles();
let firstMagazine: Magazine = magazineShelf.getFirst();

let numberShelf: Shelf<number> = new Shelf<number>();
[5, 10, 15].forEach((num) => numberShelf.add(num));

let softwareBook = bookShelf.find('Code Complete');
console.log(`${softwareBook.title} (${softwareBook.author})`);
export function deleteFromIndex2<T>(inventory: Array<T>): Array<T> {
  return inventory.splice(2, inventory.length);
}

let purgedBooks: Array<Book> = deleteFromIndex2(inventory);
purgedBooks.forEach((book) => console.log(book.title));

let purgedNums: Array<number> = deleteFromIndex2<number>([1, 2, 3, 4]);
console.log(purgedNums);
Copyright © Guanghui Wang all right reserved,powered by GitbookFile Modified: 2019-08-25 13:56:34

results matching ""

    No results matching ""