TypeScript基础——接口、泛型、类

JavaScript是弱类型语言,TypeScript是强类型语言,TypeScript 是 JavaScript 的一个超集,可以在编译期间发现并纠正错误,降低了试错的成本也提升了代码的规范性。

一、ts中的接口Interface

接口的作用:在面向对象编程中,接口是一种规范的定义,它定义行为和动作的规范。在程序设计里面,接口起到一定的限制和规范作用。

1. 定义接口对函数中的参数进行约束

    // 必选
	interface FullName {
        firstName:string;
        secondName:string
    }
    // 可选
    interface FullName {
        firstName:string;
        secondName?:string    // 添加?号之后 secondName为可选
    }
    
    // 定义了该函数的参数类型为 FullName接口类型,所以调用该函数时,传的参数必须是接口中定义的(firstName:string,secondName:string),字段名和类型必须统一,否则报错
    function printName(name:FullName){
        console.log(name.firstName+'---'+name.secondName)
    }
    var obj = {
        firstName:'wu',
        secondName:'yanzu'
    }
    printName(obj) 

2.类实现接口

	// 对类的约束,和抽象类有点像
    interface Animal{
        name:string
        eat(str:string):void;
    }
    class Dog implements Animal{
        name:string
        constructor(name:string){
            this.name = name
        }
        eat(){
            console.log(this.name+'吃肉')
        }
    }
    var d = new Dog('小黑')

二、ts中的类

抽象类: abstract 修饰, 里面可以没有抽象方法。但有抽象方法(abstract method)的类必须声明为抽象类(abstract class)
多态: 父类定义一个方法不去实现,让继承它的子类去实现 每一个子类有不同的表现

/**
 * Animal 是一个抽象类,里面含有一个eat()抽象方法
 */
abstract class Animal {
    public name:string;
    constructor(name:string) {
        this.name=name;
    }
    //抽象方法 ,不包含具体实现,要求子类中必须实现此方法
    abstract eat():any;
 
    //非抽象方法,无需要求子类实现、重写
    run(){
        console.log('非抽象方法,不要子类实现、重写');
    }
}
 
class  Dog extends Animal {
    //子类中必须实现父类抽象方法,否则ts编译报错
    eat(){
       return this.name + "吃肉";
    }
}
 
class Cat extends Animal {
    //子类中必须实现父类抽象方法,否则ts编译报错
    eat(){
        return this.name+"吃鱼";
    }
}
var dog =new Dog("tom");
var cat=new Cat("kitty");
console.log(dog.eat());
console.log(cat.eat());

三、ts中的泛型

可以把泛型理解为在编译期间不确定方法的类型(广泛之意思),在方法调用时,指定泛型具体指向什么类型。



//1.泛型函数,可以指定函数的参数,返回值类型为泛型
function getMin<T>(arr:T[]):T {
   var min=arr[0];
   arr.forEach((value)=>{
      if(value<min){
          min=value;
      }
   });
    return min;
}
 
console.log(getMin([1, 3, 5, 7, 8]));
console.log(getMin(["tom","jerry","jack","sunny"]));


//2 泛型类
class GetMin<T>{
   arr:T[]=[];
   add(ele:T){
      this.arr.push(ele);
   }
   getArr():T{
      return this.arr;
   }
}
var gm1= new  GetMin<number>();
  gm1.add(5);
  gm1.add(3);
console.log(gm1.getArr());
 
var gm2= new  GetMin<string>();
  gm2.add("tom");
  gm2.add("jerry");
console.log(gm2.getArr());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值