typescript学习笔记-1

一、类里面的修饰符 typescript里面定义属性的时候给我们提供了 三种修饰符

1、public

​ 公有 在类里面、子类、类外面都可以访问

2、protected

​ 保护类型 在类里面、子类里面可以访问在类外部没法访问

3、private

​ 私有 在类里面可以访问子类和类外部都没法访问

function Person(){

this.run1 = function(){

}

Person.run2 = function(){

}

}

加static关键词就是静态方法

静态方法没法直接调用类里面的属性

二、多态的定义

多态: 父类定义一个方法不去实现,让继承它的子类去实现 每个子类有不同的表现

多态属于继承

三、typescript中的抽象类:它是提供其他类继承的基类,不能直接被实例化

​ 用 abstract 关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体的实现并且必须在派生类中实现。

abstarct抽象方法只能放在抽象类里面

抽象类和抽象方法用来定义标准

四、接口的作用

​ 在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范作用。接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里面方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类就可以满足实际需要。typescript中的接口类似java,同时还增加了更灵活的接口类型,包括属性、函数、可索引和类等。

typescript中的接口

​ 1、属性类接口

​ 2、函数类型接口

​ 3、可索引接口

​ 4、类类型接口

​ 5、接口扩展

/***
 * 接口的作用
 */
function printLabel(labelInfo:{label:string}):void{
    console.log(labelInfo.label)
}
var labelInfo = {label: '123'}
printLabel(labelInfo)

对批量方法传入参数进行约束

​ 接口:行为和动作的规范,对批量方法进行约束

​ 接口用interface定义

1、属性接口

第一种写法

/**
 * 接口用interface定义
 */
interface FullName{
    fistName:string; //注意 以;结束
    secondName?:string;
}

function consoleLog(info: FullName){
    console.log(info.fistName+info.secondName)
}
var info = {
    fistName:'123'    
}
consoleLog(info);

​ 第二种写法(推荐使用第二种)严格按照接口来,接口中有什么就写什么

/**
 * 接口用interface定义
 */
interface FullName{
    fistName:string; //注意 以;结束
    secondName?:string;
}

function consoleLog(info: FullName){
    console.log(info.fistName+info.secondName)
}
var info = {
    fistName:'123'    
}
consoleLog(info);

接口可选属性

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ggiozYj-1572489774531)(C:\Users\silly\AppData\Roaming\Typora\typora-user-images\1572421005742.png)]

封装的ajax

	/**
 * 封装ajax
 */
interface Config{
    type:string;

    url:string;

    data?:string;

    dataType:string;
}
function ajax(config:Config){
    var xhr = new XMLHttpRequest();
    xhr.open(config.type,config.url,true);
    xhr.send(config.data);
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status == 200){
            console.log("成功")
            if(config.dataType == 'json'){
                console.log(JSON.parse(xhr.responseText));
            }else{
                console.log(xhr.responseText)
            }
            
        }else{
            console.log("连接失败")
        }
    }
}
ajax({
    type: 'get',
    data: 'name=zhangsan',
    url: 'http://a.itying.com/api/productlist',
    dataType: 'json'
})

2、函数类型接口

函数类型接口对方法传入的参数以及返回值进行约束

​ 加密的函数类型接口

//加密的函数类型接口
interface encrypt{
    (key:string,value:string):string;
}
var md5:encrypt = function(key:string,value:string):string{
    return key + value
}
console.log(md5('yijia','663856'))

interface uoload{
    (key:string,value:string):string;
}
var sayHi:uoload = function(key:string,value:string):string{
    return key + value + "say hi"
}
console.log(sayHi("你好","我是"))

3、可索引接口

​ 在ts中定义数组的方式

​ 3.1 可索引接口 对数组的约束

//可索引接口,对数组的约束
interface UserArr{
    [index:number]:string;
}
var arr2:UserArr= ['123','456','789'];
console.log(arr);

​ 3.2 可约束接口 对对象的约束

//可索引接口对对象的约束
interface UserObj{
    [index:string]:string;
}
var Obj:UserObj = {
    hello: '你',
    say: "hi"
}
console.log(Obj)

​ 3.3可索引接口 对类的约束 和抽象类有点相似

//类类型接口:对类的约束 和抽象类有点相识
interface Animal1{
    name:string;
    eat1():void
}
class Dog1 implements Animal1{
    name:string
    constructor(name:string){
        this.name = name;
    }
    eat1(){
        console.log(this.name + "吃肉");
    }
}
var dogs = new Dog1("小狗");
dogs.eat1()

​ 3.4接口扩展:接口可以继承接口

//接口扩展:接口可以继承接口
interface Animal2{
    eat():void;
}
interface Person1 extends Animal2{
    work():void;
}
class Programmer{
    public name:string;
    constructor(name:string){
        this.name = name;
    }
    coding(code:string){
        console.log(this.name + code)
    }
}
class Web2 extends Programmer implements Person1{
    constructor(name:string){
        super(name);
    }
    eat(){
        console.log("要吃")
    }
    work(){
        console.log("写代码")
    }
}
var person = new Web2("人");
person.eat();
person.work();
person.coding("codeYi");
5、 泛型

​ 软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。

​ 在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,这个组件可以支持多种类型的数据。这样用户就可以以自己的数据类型来使用组件。

​ 通俗理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持。

泛型 可以支持不特定的数据类型 要求:传入的参数和返回的参数一致

T表示泛型,具体什么类型是在调用这个方法的时候决定的

function GetData<T>(value:T):T{
    return value;
}
console.log(GetData<number>(456))

类的泛型

class MinClaa<T>{
    public list:T[] = [];
    add(value:T):void{
        this.list.push(value);
    }
    minClass(){
        var minNum = this.list[0];
        for(var i=0;i<this.list.length;i++){
            if(minNum > this.list[i]){
                minNum = this.list[i];
            }
        }
        return minNum
    }
}
var minClass = new MinClaa<number>()
minClass.add(9);
minClass.add(2);
minClass.add(77);
minClass.add(66);
console.log(minClass.minClass());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sillyyijia

互联网+乞讨

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值