在 Typescript 中声明类类型变量

Mus*_*edi 6 types class object typescript

我无法理解以下TypeScript 教程片段的第 18 行。

1   class Greeter {
2       static standardGreeting = "Hello, there";
3       greeting: string;
4       greet() {
5           if (this.greeting) {
6               return "Hello, " + this.greeting;
7           }
8           else {
9               return Greeter.standardGreeting;
10          }
11      }
12  }
13  
14  let greeter1: Greeter;
15  greeter1 = new Greeter();
16  console.log(greeter1.greet());
17  
18  let greeterMaker: typeof Greeter = Greeter;
19  greeterMaker.standardGreeting = "Hey there!";
20  
21  let greeter2: Greeter = new greeterMaker();
22  console.log(greeter2.greet());
Run Code Online (Sandbox Code Playgroud)

据我从教程中了解到,声明的目标greatermaker是将 Greeter 类类型放入变量中,而不是实例类型。

=首先,这行赋值运算符的作用是什么?

其次,类类型和实例类型之间的区别到底是什么意思?我想,在第一个中,我们能够操作静态成员变量,而不是在第二个中?

编辑。

为什么我们不直接使用let greeterMaker: typeof Greeter,即不使用赋值运算符呢?

Sur*_*yan 3

目标是将Greeter类(实际上是函数)的引用副本放入变量中greeterMaker。有了这些,你就有了 2 个变量greeterMakerGreeter引用同一个类。所以你可以通过创建该类的对象

new Greeter()
Run Code Online (Sandbox Code Playgroud)

或者

new greeterMaker()
Run Code Online (Sandbox Code Playgroud)

这两个语句将执行相同的操作,因为greeterMaker只是另一个引用Greeter.