在我学习静态侧的时候翻译文章
https://bbs.tampermonkey.net.cn/forum.php?mod=viewthread&tid=2665&highlight=%E5%AE%9E%E4%BE%8B%E4%BE%A7
有一段话
Foo类具有一个静态侧和一个实例侧
静态方面Foo是与构造函数有关的东西
包括
构造函数本身,类型为{new(constructorArgument: string): Foo}
属性staticProp,类型为string
方法staticMethod,类型为{(): void}
这种类型称之为typeof Foo
刚才突然明白了这句话意义
typeof核心是根据一个js代码推断出来实际的类型层面
而我们声明class的时候实际有两个东西
1.类型层面的class,也就是实例类型
2.一个class的构造函数,属于运行层面
我们在let a:类名=new aaa()
使用的是类型层面
而使用let a:typeof 类名=aaa
这里的类名实际上是一个运行层面
通过typeof 函数推导出来构造函数类型
可以参考代码
function abc(name: string): number {
return 6;
}
type abc = string;
let ins_a: abc = "888";
let type_a: typeof abc = function (a: string) {
return 6;
};
同样叫abc
一个是类型层面,一个是运行层面
而我们可以通过typeof将运行层面变为类型层面作为类型来赋值
这就是typeof 类名可以得到类的构造函数的本质