Class 在Typescript中声明类类型变量
我很难理解下面一段代码的第18行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.
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
- 类
的JavaScript实例类型,如Greeter
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 Greeter代码>greetermaker=Greeter;`?请将问题标记为已解决并投票表决相关答案。@JGoodgive实际上我的困惑还没有完全解决。到时候我会接受的。向上投票是我自己决定的。@JGoodgive但为什么我会选择欢迎者。这将是一个字符串,而不是类型,因为javascript没有这种意义上的类型。鉴于您注意到在这种情况下typeof实际上只返回字符串,本教程中使用typeof
的基本原理是什么?
new greeterMaker()