类声明将会引入一个新的命名类型,即与类同名的类类型。类类型表示类的实例类型,它由类的实例成员类型构成。例如,下例中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)
输出结果:
酷客网相关文章:
评论前必须登录!
注册