所有
我是TypeScript的新手,当我从官方网站上阅读TypeScript手册时,有一个例子:
类的静态/实例端之间的区别使用时 类和接口,有助于记住一个类有两个 types:静态端的类型和实例端的类型。 您可能会注意到,如果您使用构造创建接口 签名并尝试创建一个实现此接口的类 得到一个错误:
interface ClockInterface {
new (hour: number, minute: number);
}
class Clock implements ClockInterface {
currentTime: Date;
constructor(h: number, m: number) { }
}
这是因为当一个类实现一个接口时,只有 检查类的实例端。由于构造函数位于 静态方面,它不包括在此检查中。
相反,您需要使用'静态'班级的一面 直。在这个例子中,我们直接使用该类:
interface ClockStatic {
new (hour: number, minute: number);
}
class Clock {
currentTime: Date;
constructor(h: number, m: number) { }
}
var cs: ClockStatic = Clock;
var newClock = new cs(7, 30);
我无法理解为什么最后一部分会起作用:
var cs: ClockStatic = Clock;
var newClock = new cs(7, 30);
我认为cs是一个变量,它将引用具有ClockStatic类型的对象,但为什么它可以访问类名?我认为Clock类型与ClockStatic无关,为什么它可以被赋予cs?
由于
答案 0 :(得分:1)
我认为cs是一个变量,它将引用具有ClockStatic Type
的对象
这是100%正确。
但为什么它可以访问类名?
没有"类名"在TypeScript / JavaScript中。类是任何其他类的对象。您可以认为声明class Clock
与声明var Clock: ClockStatic
类似。
我认为Clock类型与ClockStatic
无关
类(其他名称:构造函数)Clock
具有与ClockStatic
兼容的类型。 类型 Clock
指的是实例化该类时获得的类型。
为什么可以给cs?
类 Clock
满足ClockStatic
的要求,因为它具有适当的构造签名。