The word generics refers to using variable types, that is, parameters that at a later time will be bound to actual types. Parametric types were first introduced in C++ templates, then they took the name generics in Java and in C#. The main difference between C++ and Java/C# implementation is that C++ parametric types disappear at runtime; only the complete types obtained by substituting actual types to all template parameters survive at runtime.
On the contrary, in C# and Java, data structures (classes, interfaces, functions) based on generics are legal runtime types. In fact, any C# programmers with some experience in reflection know that a generic class can be dynamically instantiated at runtime with actual types.
TypeScript has a generics implementation that mimics C# syntax, but, as in C++, TypeScript generics live just at compilation time and disappear at runtime...