TypeScript 08 class类(高级类型)

157 阅读2分钟

1 . class 概述

TS 中的 class 不仅只提供了 class 的语法功能 ,也作为一种类型存在 。且实例对象的类型就是原型 。 如下 : Person类的实例对象 p 的类型是 Person 。

0413.png

2 . 属性初始化

2 . 1 属性没有默认值

class Person{
   age : number
}

2 . 2 属性有默认值 (直接赋值默认值)

class Person{
   gender = ' 男 ' 
}

3 . 类的构造函数 constructor

作用 : 为类的 实例 属性设置值 。

class Person{
   age : number
   constructor(age : number){
   this.age = age
   }
}
var p = new Person(18)
console.log(p.age) ;      // 18 

注意 :

  • 属性成员初始化 (比如 , age :number)后,才能在构造函数里通过 this . age来访问 age 属性。
  • 要为构造函数参数注明类型 ,否则会被隐式推断为 any 类型
  • 构造函数不需要返回值类型 !!

0414.png

4 . 类的实例方法(跟对象的方法语法一样)

class Point{
   x = 1 
   y = 2
   scale( n : number ) : void {
         this . x = x * n
         this . y = y * n
         }
}

var p = new Point() ;
p . scale(10);    // 需自行调用使用
console . log(p.x , p.y);   // 10  20

5 . 类的继承

TS 中类继承的两种方法 : 1. extends继承 2. implements(实现接口) 注意: JS中只有 extends继承

5 . 1 extends继承

class Animal {
   move(){
    console . log('走两步')
    }
}

class Dog extends Animal{
   bark(){
    console . log('汪汪汪')
    }
}

const dog = new Dog() ;
dog.move() ; 

Dog的实例对象 dog 同时具有 父类Animal 和 子类 Dog的所有属性和方法!!!

5 . 2 implements (实现接口 ,类和接口的关系)

0415.png

注意 : Person类中必须提供 Singable 接口中指定的所有方法和属性

6 . 类属性和方法的可见性修饰

在继承时 ,类的一些属性和方法是不希望被继承的 。所以就有了可见性修饰符!!

6 . 1 可见性修饰符 public(公开的)

0416.png public修饰符是默认可见性 。所以可以省略不写

6 . 2 可见性修饰符 protected(受保护的)

仅在 类 和 子类(继承后)中可见 ,两者的实例对象中都是不可见的 。

0417.png

6 . 3 可见性修饰符 private(私有的)

只能在 类 中被访问 ,在子类、类和子类的实例对象中都不能被访问!!!

0418.png

7 . readonly 只读修饰符

readonly 只读修饰符 ,只能修饰属性 ,不能修饰方法 ,被它修饰的属性只能在constructor函数里面进行更改 ,在其他地方都无法更改 !!!

  • 如果声明时没有指定类型且赋值 ,则它会变成字面量类型 ,在任何地方都无法修改!!!

  • 接口 和 对象里面都可以用 readonly 只读修饰符