| 
					
				 | 
			
			
				@@ -1,3 +1,39 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+enum Category { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Biography,     // 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Poetry,        // 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Fiction,       // 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+enum Category2 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Biography = 1, // 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Poetry,        // 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Fiction,       // 3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+enum Category3 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Biography = 1, // 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Poetry = 5,    // 5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Fiction = 0,   // 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let favoriteCategory: Category = Category.Fiction; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+console.log(favoriteCategory, Category[favoriteCategory], Category['Fiction'], Category[Category['Fiction']], Category); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let strArray1: string[] = ['a', 'strings', 'array']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// "Generics" syntax. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let strArray2: Array<string> = ['another']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// A plain Array wouldn't work: in this case Array is the TS generic, not the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// JS builtin. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let mixedArray1: Array<any> = [42, true, 'banana']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let mixedArray2: any[] = [42, true, 'banana']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let mixedArray3: (number|boolean|string)[] = [42, true, 'banana']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let mixedArray4 = [42, true, 'banana']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let myTuple: [number, string] = [25, 'truck']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let [firstElement, secondElement] = myTuple; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+myTuple[2] = 'book'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// But not: myTuple[0] = 'book'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// Nor: myTuple[2] = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function GetAllBooks() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   let books = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 |