Ts 的类
TS 中的公共、私有和受保护的修饰符:
1.public
表示公共的,用来指定在创建实例后可以通过实例访问的,也就是类定义的外部可以访问的属性和方法。默认是 public
2.private
修饰符表示私有的,它修饰的属性在类的定义外面是没法访问的:
class Parent { private age: number; constructor(age: number) { this.age = age; } } const p = new Parent(18); console.log(p); // { age: 18 } console.log(p.age); // error 属性“age”为私有属性,只能在类“Parent”中访问 console.log(Parent.age); // error 类型“typeof ParentA”上不存在属性“age” class Child extends Parent { constructor(age: number) { super(age); console.log(super.age); // 通过 "super" 关键字只能访问基类的公共方法和受保护方法 } }
3.rotected
修饰符是受保护修饰符,和private
有些相似,但有一点不同,protected
修饰的成员在继承该类的子类中可以访问
4.readonly 修饰符
只读不能修改
参数属性
参数属性简单来说就是在 constructor 构造函数的参数前面加上访问限定符,也就是前面讲的 public、private、protected 和 readonly 中的任意一个
class B { constructor(public name: string) { } } const b = new B("aaa"); console.log(b.name)
静态属性
和 ES6 的类一样,在 TS 中一样使用static
关键字来指定属性或方法是静态的,实例将不会添加这个静态属性,也不会继承这个静态方法,你可以使用修饰符和 static 关键字来指定一个属性或方法
可选类属性
使用?
符号来标记
抽象类
抽象类一般用来被其他类继承,而不直接用它创建实例。抽象类和类内部定义抽象方法,使用abstract
关键字
abstract class People { constructor(public name: string) {} abstract printName(): void; } class Man extends People { // error 非抽象类“Man”不会实现继承自“People”类的抽象成员"printName" constructor(name: string) { super(name); this.name = name; } } const m = new Man("lison"); m.printName(); // error m.printName is not a function
通过上面的例子我们可以看到,在抽象类里定义的抽象方法,在子类中是不会继承的,所以在子类中必须实现该方法的定义
越努力越幸运