与实现questoin内部的构造函数的接口

时间:2015-12-03 19:12:25

标签: interface typescript

所有

我是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?

由于

1 个答案:

答案 0 :(得分:1)

  

我认为cs是一个变量,它将引用具有ClockStatic Type

的对象

这是100%正确。

  

但为什么它可以访问类名?

没有"类名"在TypeScript / JavaScript中。类是任何其他类的对象。您可以认为声明class Clock与声明var Clock: ClockStatic类似。

  

我认为Clock类型与ClockStatic

无关

(其他名称:构造函数Clock具有与ClockStatic兼容的类型。 类型 Clock指的是实例化该类时获得的类型。

  

为什么可以给cs?

Clock满足ClockStatic的要求,因为它具有适当的构造签名。