readonly
https://www.typescriptlang.org/docs/handbook/2/classes.html#readonly
你可以使用 readonly
关键字将属性设置为只读的。 只读属性必须在声明时或构造函数里被初始化。
class Animal {
private age: Number;
public readonly name: string;
constructor(name: string, age: Number) {
this.name = name;
this.age = age;
}
}
const dog: Animal = new Animal('zhangsan', 28)
// dog.name='李四'; // error 无法分配到 "name" ,因为它是只读属性
console.log(dog.name);
out
zhangsan
Getters / Setters
https://www.typescriptlang.org/docs/handbook/2/classes.html#getters–setters
class Animal {
surname: string;
name: string;
get fullName():string{
return this.surname+"-"+this.name;
}
set fullName(fullName:string){
const names = fullName.split('-')
this.surname = names[0]
this.name = names[1]
}
}
const dog: Animal = new Animal()
dog.surname = '司马'
dog.name = '三三'
console.log(dog.fullName)
dog.fullName = '西门-吃藕'
console.log(dog.surname, dog.name)
out
司马-三三
西门 吃藕
如果编译遇到
error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
执行
tsc 文件.ts -t es5
static Members
https://www.typescriptlang.org/docs/handbook/2/classes.html#static-members
- 静态属性, 是类对象的属性
- 非静态属性, 是类的实例对象的属性
class Animal {
static age: number;
name: string;
static getA() {
// 静态方法,不能直接调用类里的属性
/* console.log(this.name) */ /* error,不能直接调用类里的属性 */
console.log(this.age + "岁的 小嫂子")
}
}
Animal.age = 22;
Animal.getA()
out
22岁的 小嫂子
抽象类
https://www.typescriptlang.org/docs/handbook/2/classes.html#abstract-classes-and-members
用abstract定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现
1、抽象方法必须在抽象类中
2、抽象类和抽象方法是一个标准,定义标准后,子类中必须包含抽象定义的方法
abstract class Animal {
age: number;
name: string;
constructor(name: string, age: number) {
this.age = age;
this.name = name;
}
abstract eat(): void;
}
class Dog extends Animal {
constructor(name: string, age: number,) {
super(name, age)
}
eat(): void {
console.log("一条" + this.age + "岁的" + this.name + "小狗,每次吃饭都是哐哐猛吃,简直不敢相信.")
}
}
const dog: Dog = new Dog('张思', 22);
dog.eat();
out
一条22岁的张思小狗,每次吃饭都是哐哐猛吃,简直不敢相信.
提示:抽象类中可以没有抽象方法,但有抽象方法的一定是抽象类