TypeScript类类型

类声明将会引入一个新的命名类型,即与类同名的类类型。类类型表示类的实例类型,它由类的实例成员类型构成。例如,下例中Circle类声明同时也定义了Circle类类型,该类型包含number类型的radius属性和函数类型的area属性。该类类型与CircleType接口表示的对象类型是相同的类型。示例如下:

class Circle {
   radius: number;
   area(): number {
       return Math.PI * this.radius * this.radius;
   }
}

interface CircleType {
   radius: number;
   area(): number;
}

// 正确
const a: Circle = new Circle();

// 正确
const b: CircleType = new Circle();

在定义一个类时,实际上我们定义了一个构造函数。随后,我们可以使用new运算符和该构造函数来创建类的实例。我们可以将该类型称作类的构造函数类型,在该类型中也包含了类的静态成员类型。

下例中常量a的类型是类类型A,也就是我们经常提到的类的实例类型。常量b的类型是类的构造函数类型,我们使用了包含构造签名的接口表示该类型,并将类A赋值给了常量b。不难发现,类的静态成员x是类构造函数类型的一部分。示例如下:

class A {
    static x: number = 20;
    y: number = 100;
 }

 // 类类型,即实例类型
 const a: A = new A();

 interface AConstructor {
    new (): A;
    x: number;
 }

 // 类构造函数类型
 const b: AConstructor = A;

 console.log(a.y)
 console.log(b.x)

输出结果:

TypeScript类类型

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!