typScript学习笔记(下)

 一、TS 继承

class Person {

  name: string;

  age:number;

  // 通过 constructor 构造函数 创建自己的小动物

  constructor(name:string,age:number) {

    this.name =name;

    this.age = age

  }

  sayhi(val:string) {

    console.log('我你爹');

    console.log(val);

  }

}

/**

 * extends 继承

 * 设置子类的独有函数

 */

class Dog extends Person {

  run() {

    console.log(this.name,'paopao~~~');

  }

}

// 直接继承,函数调用

class Cat extends Person{}

const per = new Person('老狗',18)

const pers = new Cat('死狗',17)

const res = new Dog('小狗',9)

console.log(per)

console.log(res)

console.log(pers)

res.run()

per.sayhi('111')

pers.sayhi('222')

二、TS接口

(function() {

  /**

   *  TS 接口

   */

  

  // 不可重复定义类名

  type myType = {

    name:string;

    age:number

  }

  

  /**

   * interface 接口定义一个类结构

   * 定义一个类中应该包含哪些属性和方法,可重复定义,叠加或覆盖

   * 也可以当作类型去使用

   * 接口可以在定义类的时候去限制类的结构

   * 接口只定义对象的结构,不考虑实际值

   */

  interface myInterface{

    name:string;

    age:number

  }

  interface myInterface{

    gender:string

  }

  let obj: myInterface = {

    name: 'ls',

    age:18,

    gender: 'nan'

  }

  console.log(obj)

  interface myInter{

    name:string;

    sayHi():void

  }

  /**

   * 在类中使用 implements 使用接口

   */

  class myClass implements myInter{

    name: string

    // sayHi(): void {

    //   throw new Error("Method not implemented.")

    // }

    constructor(name:string) {

      this.name = name

    }

    sayHi() {

      console.log('daji')

    }

  }

  let sss = new myClass('ls')

  console.log(sss)

  sss.sayHi()

})()

三、TS 的修饰符

  class mini{

    /**

     * TS 可以在属性前添加属性的修饰符

     * public 修饰的属性可在任意位置修改,访问(默认值)

     * private 私有属性 只能在类内部进行修改,访问

     * protected 受保护的属性,只能在当前或子类中修改及访问

     */

    public name:string;

    public age:number

    private sex: string

    constructor(name:string,age:number,sex:string) {

      this.name = name;

      this.age = age;

      this.sex = sex;

    }

    // 外部通过函数间接访问

    // getSex() {

    //   return this.sex

    // }

    // 外部通过函数间接修改

    // setSex(val:string) {

    //   this.sex = val

    //   console.log(this.sex)

    // }

    /**

     * TS 中设置getter方法的方式

     * get + 方法名 不可与属性名重复' 访问

     * set + 方法名 不可与属性名重复' 修改

     */

    get _sex() {

      return this.sex

    }

    set _sex(val:string) {

      this.sex = val

      console.log(this.sex);

      

    }

  }

  let obj = new mini('ls',6, '男')

  console.log(obj)

  

  /**

   * 现在属性是在对象中设置的。可任意被修改

   * 导致数据不安全

   */

  obj.name = 'zs'

  obj.age = -2

  // obj.sex = 'nv' 无法修改

  // console.log(obj.getSex());

  console.log(obj._sex)

  obj._sex = 'wonidie'

  // console.log(obj.sex) 无法访问

  // obj.setSex('窝你爹')

  

  class a {

    protected num:number // 受保护的属性,只能在当前或子类中被访问和修改

    constructor(num:number) {

      this.num = num

    }

  }

  class b extends a {

      test(){

        console.log(this.num);

      }

  }

  let c = new b(11)

  c.test()

  // 语法糖

  class d {

    constructor(protected name:string, protected age: number) {}

  }

  let D = new d('ls',7)

  console.log(D);

  

四、TS 的 super 关键字

class mini {

  constructor(protected name:string,protected age:number){}

  say(aaa:number,bbb:number):number {

    console.log(aaa+bbb );

    return aaa+bbb 

  }

}

class success extends mini {

  /**

   * 子类中使用构造函数

   * super 指向的是当前父类的构造函数,参数和父类保持对应

   */

  constructor(name:string,age:number,protected sex:string){

    super(name,age)

    this.sex = sex

  }

  /**

   * 修改父类中的方法

   * super 关键字 + 方法调用,参数和父类保持对应

   * 要修改的操作

   */

  fn(a:number,b:number,c:string){

    let res: number

    res = super.say(a,b)

    console.log( res, c);

  }

}

let T = new success('老狗', 19, '男')

console.log(T);

T.fn(1,2,'小狗')

五、泛型

/**

 * TS 泛型

 * 定义类或函数时,如果遇见类型不明确时就可以使用泛型

 * 使用时先用尖括号定义,表未知类型,只有在表达式执行时才会有明确的类型

 * 不同于any,安全可靠,避免any带来的隐患

 */

function fn<T>(a: T): T {

  return a 

}

// 使用时直接调用函数或类即可

fn(10) // 不指定类型,Ts 自动检测


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值