Please add a new primitive type 'Class'

class Greeter { ... }
// only classes can be assigned to variables or members of type 'Class':
var c : Class = Greeter;
// this would trigger a compile time error:
var c2 : Class = 123;
// only variables or members of type 'Class' can be instantiated:
var x = new c();
// nice to have: typeof() on a variables or members of type 'Class' return the class name:
var s = typeof( c );

The typeof piece won't be possible as it's a runtime thing and TypeScript's types do not persist at runtime. The good news is that what you want is already possible! A class in TypeScript is a combination of two things: A construct signature and a brand.
Brands are unique to each class, so you don't care about those. Your question then boils down to: what type will be assignment compatible with every class? Consider this:

interface Class {
new (... args): any;
}

This interface will be assignment compatible with any class because all classes will have a construct signature with one or more arguments that returns something assignment compatible with any. You can limit this further depending on your use case.

That is not the case :) The new (): any; signature is a special signature called a construct signature. It specifies the signature of a constructor when calling it with new. Secondly, TypeScript is structurally typed. The only thing you need to
be assignment compatible with the interface Class is an object that has a construct signature. All classes will have a construct signature. Try it out :)

Your classes do not implement that interface, it describes the class itself. Interfaces that classes implement describe the shape of instances of that class, whereas I believe you are asking how to identify the constructors themselves. Remove the implements
clause and you should be good. Then you can use the type Class for any vars or parameters you want to be classes.