为什么我们需要typeof作为接口来获取typescript中类的静态属性
我正在学习解释构造函数函数的typescript官方手册,并遇到了以下代码为什么我们需要typeof作为接口来获取typescript中类的静态属性,typescript,function,constructor,interface,Typescript,Function,Constructor,Interface,我正在学习解释构造函数函数的typescript官方手册,并遇到了以下代码 class Greeter { static standardGreeting = "Hello, there"; greeting: string; greet() { if (this.greeting) { return "Hello, " + this.greeting; } else { re
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 Greeter
访问具有静态属性的实际类,因此可以编写greeterMaker.standardGreeting=“嘿,这里!”代码>
我的问题是,当我测试这一点时,我意识到同样的事情不需要编写typeof Greeter
就可以了,只需要let greeterMaker=Greeter代码>一个人可以写greeterMaker.standardGreeting=“嘿,你好!”代码>
请告诉我哪里出错了,什么时候我需要写关键字的类型。是的,你说得对,在这种情况下,写:问候者的类型是不必要的,因为当你为greeterMaker
分配值更大时,它也为greeterMarker
分配类型。所以我认为:typeof Greeter
只是一个关于Typescript如何工作的解释在这种情况下,您不需要显式地使用typeof Greeter
,编译器将根据赋值为您推断此类型。但是,即使您没有明确指定注释,typeof Greeter
仍将是类型greeterMaker
。我认为文档的要点是,如果您需要静态部分的类型,那么类型是typeofgreeter
,而Greeter
是实例的类型
这可能有用的一个示例是在factory函数中:
class Greeter {
sayHi() { console.log("Hi") }
}
class AlertGreeter extends Greeter {
sayHi() { alert("Hi") }
}
function doGreeting(cls: typeof Greeter) {
new cls().sayHi();
}
doGreeting(Greeter);
doGreeting(AlertGreeter);
谢谢一个简单的问题。是类AlertGreeter typeof Greeter,因为它具有相同的函数名。如果它的方法被称为其他方法,它还会是typeof吗Greeter@JoeStarbrightAlertGreeter
扩展了Greeter
,因此它与Greeter
兼容,而且它们都有一个空构造函数