Class 在Typescript中声明类类型变量

Class 在Typescript中声明类类型变量,class,typescript,object,types,Class,Typescript,Object,Types,我很难理解下面一段代码的第18行 1级迎宾员{ 2静态标准问候语=“你好,那里”; 3问候语:字符串; 4.问候{ 5如果(这是问候语){ 6返回“你好,”+这个问候语; 7 } 8其他{ 9.回程迎宾。标准迎宾; 10 } 11 } 12 } 13 14让迎宾员1:迎宾员; 15迎宾员1=新迎宾员(); 16 console.log(greeter1.greet()); 17 18让迎宾员:迎宾员类型=迎宾员; 19 greeterMaker.

我很难理解下面一段代码的第18行

1级迎宾员{
2静态标准问候语=“你好,那里”;
3问候语:字符串;
4.问候{
5如果(这是问候语){
6返回“你好,”+这个问候语;
7           }
8其他{
9.回程迎宾。标准迎宾;
10          }
11      }
12  }
13
14让迎宾员1:迎宾员;
15迎宾员1=新迎宾员();
16 console.log(greeter1.greet());
17
18让迎宾员:迎宾员类型=迎宾员;
19 greeterMaker.standardGreeting=“你好!”;
20
21让迎宾员2:迎宾员=新迎宾员();
22 console.log(greeter2.greet());
我从教程中了解到,
greatermaker
声明的目标是将Greeter类类型转换为变量,而不是实例类型

首先,赋值运算符
=
在此行中的作用是什么

其次,类类型和实例类型之间的区别究竟意味着什么? 我想,在第一种情况下,我们能够操纵静态成员变量,而不是第二种

编辑。


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

目标是将
Greeter
类(实际函数)的引用副本放入变量
greeterMaker
。有了这些,您就有了两个变量
greeterMaker
Greeter
来引用同一个类。因此,您可以通过

new Greeter()

这两条语句将做同样的事情,因为
greeterMaker
只是另一个变量,它引用了@JGoodgive注释的
Greeter

(暂定)扩展

需要注意的一个重要问题是:

  • TypeScript类型引用
    Greeter
    ,如
    let var:Greeter
  • Greeter
    的JavaScript实例类型,如
    var=newgreeter;var类型
  • JavaScript类类型变量,它体现了类构造函数本身,如
    var=Greeter
    中所示
需要注意的是,类类型变量
var=Greeter
实际上是类构造函数。因此,顺便说一句,它属于迎宾员类型;因为它是一个公共成员函数的类


另一方面,根据教程,
typeof Greeter
应该返回
Greeter
。这是因为在
typeofgreeter
中的
Greeter
表示类
Greeter
的构造函数。由于构造函数返回类本身(作为实例),它[构造函数函数
Greeter
]实际上是类类型
Greeter

为什么在
greaterMaker
的声明中需要赋值运算符?声明
let greeterMaker:typeof Greeter
会有什么问题?它只会将类型设置为
Greeter
,但不会为其赋值。考虑一下
让str:string
-
str
在本例中是
未定义的
类型分配仅帮助typscript编译器理解代码。除了未定义之外,实际获取任何内容都需要赋值。因此,类既是一个javascript函数,允许您创建一个原型对象,在typescript中,它是一个类型,是从该函数返回的对象的类型,但仅在typescript编译器中。因此,分配类型实际上除了帮助编译器捕获错误外,什么都做不了。@JGoodgive好的,我想我现在明白了。@SureSrapyan我的困惑在于使用
typeof
。你能谈谈
类型的使用吗?正如@JGoodgive所指出的,它不应该是
让greetermaker:Greeter=Greeter
;i、 e.没有
typeof
Javascript构造?赋值设置值,冒号仅设置类型。因此,如果您打算将greetmaker用于任何事情,则必须指定它。但为什么你要打招呼呢。这将是一个字符串,而不是类型,因为javascript没有这种意义上的类型。只需执行
让greetmaker:Greeter=Greeter。或者简单地删除类型声明,因为赋值将隐式地执行。我想我现在理解了我对这一行的混淆。第18行等同于以下两行,对吗:
let greeterMaker:typeof Greetergreetermaker=Greeter;`?请将问题标记为已解决并投票表决相关答案。@JGoodgive实际上我的困惑还没有完全解决。到时候我会接受的。向上投票是我自己决定的。@JGoodgive但为什么我会选择欢迎者。这将是一个字符串,而不是类型,因为javascript没有这种意义上的类型。鉴于您注意到在这种情况下typeof实际上只返回字符串,本教程中使用
typeof
的基本原理是什么?
new greeterMaker()