class Program { static void Main(string[] args) { Type t = typeof(A<,>); Console.WriteLine(typeof(A<,>)); // prints A\'2[T1,T2]
It is accepted because it is a generic type.
It is an open generic type (where they type parameters have not been specified), but a type none the less.
See the discussion here (What exactly is an “open generic type”).
And on MSDN (typeof):
The typeof operator can also be used on open generic types.