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 的含义