1.定义类
使用class关键字。
class User {
name: string;
constructor(name) {
this.name = name;
}
sayName() {
console.log(this.name);
}
}
const user = new User("volit");
2.继承
使用extends关键字,继承类。子类从父类继承了属性和方法。但是子类的构造方法在访问this之前,必须调用super()。
class User {
name: string;
constructor(name) {
this.name = name;
}
sayName() {
console.log(this.name);
}
}
class extraUser extends User {
constructor(name) {
super(name);
}
}
const user = new extraUser("volit");
user.sayName(); // volit
3.访问修饰符
(1)publicc
成员属性的默认修饰符是public。
(2)private
标记为private时,成员不能被声明它的类外部访问。且对于TypeScript鸭子模型的机制,需要两个类声明为private属性,都来自同一个地方。
class User {
private name: string;
constructor(name) {
this.name = name;
}
sayName() {
console.log(this.name);
}
}
const user = new User("volit");
console.log(user.name); // 属性“那么”为私有属性,只能在类“User“中访问
(3)protected
protected和private很相似,但有一点不同,protected修饰的成员变量可以被派生类访问。同时,protected可以修饰构造器,这意味着这个构造器不能再包含它的类外被实例化,但是可以被继承。
(4)readonly
将成员变量声明为只读,声明为只读的成员变量必须在声明或构造函数里被初始化。
(5)参数属性
在构造器参数前加上访问修饰符,会自动创建并初始化成员属性。
class User {
constructor(public name: string) {}
sayName() {
console.log(this.name);
}
}
const user = new User("volit");
user.sayName(); // volit
4.封装
TypeScript支持通过getter/setter来截取对象成员的访问。
class User {
constructor(private _name: string) {}
get name() {
return this._name;
}
set name(_name: string) {
this._name = _name;
}
}
ps.只带有get而没有get的属性会被默认视为readonly属性
5.静态属性
使用static关键字定义静态属性,定义静态属性可以直接使用类名.属性名的方式,访问静态属性。
class User {
static username;
constructor(private _name: string) {}
get name() {
return this._name;
}
set name(_name: string) {
this._name = _name;
}
}
6.抽象类
抽象类使用abstract关键字定义,通常作为派生类的基类使用,一般不会被实例化。不同于接口,抽象类可以包含成员的实现细节。同时,使用abstract关键字也可以定义抽象方法,抽象类中的抽象方法不包含具体实现,并且必须在派生类中实现。抽象方法必须被abstract修饰符修饰,且可以定义访问修饰符。