Examples Function level function reverse<T>(items: T[]): T[] { var toreturn = []; for (let i = items.length - 1; i >= 0; i--) { toreturn.push(items[i]); } return toreturn; } var sample = [1, 2, 3]; var reversed = reverse(sample); console.log(reversed); // 3,2,1 // Safety! reversed[0] = '1'; // Error! reversed = ['1', '2']; // Error! reversed[0] = 1; // Okay reversed = [1, 2]; // Okay Class level /** A class definition with a generic parameter */ class Queue<T> { private data = []; push(item: T) { this.data.push(item); } pop(): T | undefined { return this.data.shift(); } } /** Again sample usage */ const queue = new Queue<number>(); queue.push(0); queue.push("1"); // ERROR : cannot push a string. Only numbers allowed Member functions class Utility { reverse<T>(items: T[]): T[] { var toreturn = []; for (let i = items.length - 1; i >= 0; i--) { toreturn.push(items[i]); } return toreturn; } }