typeof expression 用来饭回表达式结果的类型字面量。
typeof instance 返回的是类型字面量
typeof 123 // number
typeof 'foo' //string
typeof {} // object
typeof class 返回的是构造器方法
class Greeter {
    static standardGreeting = "Hello, there";
    greeting: string;
    greet() {
        if (this.greeting) {
            return "Hello, " + this.greeting;
        }
        else {
            return Greeter.standardGreeting;
        }
    }
}
let greeter1: Greeter;
greeter1 = new Greeter();
console.log(greeter1.greet());
let greeterMaker: typeof Greeter = Greeter;
greeterMaker.standardGreeting = "Hey there!";
let greeter2: Greeter = new greeterMaker();
console.log(greeter2.greet());
声明变量时使用typeof
class Foo{
  static bar = 'im a static property';
  baz: string;
}
let foo: Foo = new Foo() // A 种写法
let foo: typeof Foo = Foo // B 种写法
A 写法:foo 作为Foo的实例,包含了 Foo的非静态属性和方法
B 写法:foo 作为Foo的构造器方法,包含了Foo的静态属性和方法。可以理解为 类型的类型,也即是 foo是Foo的类型
把类当作接口使用
class Point {
    x: number;
    y: number;
}
interface Point3d extends Point {
    z: number;
}
let point3d: Point3d = {x: 1, y: 2, z: 3};
如上一节里所讲的,类定义会创建两个东西:类的实例类型和一个构造函数。 因为类可以创建出类型,所以你能够在允许使用接口的地方使用类。
参考
TypeScript Handbook: class static side example overcomplication
TypeScript中 typeof 的含义
 
                         
                                

