Generic classes can be defined in the exactly same way as generic interfaces, by enclosing all generics inside the <> symbols, and then using them in the class definition. As an example of designing a complete application that uses both generic interfaces and classes, this section proposes rewriting the dom manipulation example at the end of the Inheriting from a class and implementing interfaces section of Chapter 4, Using Classes and Interfaces.
As discussed in the previous section, the ItemList interface can be redefined as a generic interface to avoid representing data items with the any type:
interface ItemList<T> {
appendItem(itemData: T): void;
prependItem(itemData: T): void;
appendBefore(node: HTMLElement, itemData: T): void;
appendAfter(node: HTMLElement, itemData: T): void;
removeItem(node: HTMLElement): void;
itemTemplate...