ts的函数接口

56 阅读2分钟

1、函数接口

interface IFn{

    (a:number):void;

}

// 函数接口的实现

var fn:IFn=function(a){


}

详细讲解

    2、参数也是一个函数的接口

    a是一个数值,f是一个回调函数 有一个参数,并且参数是数值,返回一个数值结果


    interface IFn{

      // f:(a:number)=>number :=>number 代表了回调函数返回值  

        (a:number,f:(a:number)=>number):number//代表了总函数的返回值

    }


    interface IFn1{

        (a:number):number;

    }

    interface IFn2{

        (a:number,f:IFn1):number;

    }

    var fn:IFn2=(a,f)=>{

        if(a>5){

          return  f(a);

        }else{

            a-=5;

         return   f(a)

        }

    }




    3、函数返回Promose对象

    interface IFn{

        (time:number):Promise<number>

    }


    Promise<>中的类型是Promise中resolve返回结果的类型

    var delay:IFn=function(time){

        return new Promise(function(resolve:(n:number)=>void,reject:()=>void){

            setTimeout(function(){

                resolve(10);

            },time)

        })

    }


    interface ILoadImage{

        (src:string):Promise<HTMLImageElement>

    }


    var loadImage:ILoadImage=src=>new Promise((resolve:
    (n:HTMLImageElement)=>void,reject:(a:string)=>void)=>{

        var img=new Image();

        img.src=src;

        img.onload=e=>{

         resolve(img);

        }

        img.onerror=e=>{

            reject(src)

        }

    })





    4、async函数的接口

    interface IF{

        (time:number):Promise<void>

    }


    var fn:IF=async (time)=>{

        var a:number=await delay(time).catch(e=>{}) as number;

        console.log(a);

    }

    fn(1000)


    interface IFn{

        (time:number):Promise<number>

    }

    var delay:IFn=function(time){

        return new Promise(function(resolve:(n:number)=>void,reject:()=>void){

            setTimeout(function(){

              resolve(10)

            },time)

        })

    }





    5、多样性的函数接口

    1)、全必填参数

    interface IFn1{

        (a:number,b:number,c:number):void;

    }

     2)、选填参数

    interface IFn2 {

        (a: number, b: number, c?: number): void;


    }


    3)、包含属性的函数

    interface IFn5{

        (a:number,b:number,c?:number):void;

        num:number;

    }

    // 这种复合型的函数,需要开始使用断言

    var fn:IFn5=<IFn5>((a,b,c)=>{
    })

    fn.num=10

    4)、剩余参数的接口

    interface IFn3{

        (a:number,b:number,...arg:Array<number>):void

    }

    5)、使用元组的参数接口

    如果arg使用元组类型,意味着这个函数参数是一个固定的参数项

    interface IFn4{

        (a:number,b:number,...arg:[string,number,string]):void;

    }

    var fn:IFn4=(a,b,...arg)=>{

        console.log(a,b,arg);//1,2, ['a', 2, 'd']

    }

    fn(1,2,"a",2,"d")

    6)、使用元组统一设定参数类型,可以避免对于函数中参数名的不同

    interface IFn{

        (...arg:[number,string,number,number,string]):void

    }

    var fn:IFn=(a,b,c,d,e)=>{


    }

    var fn1:IFn=(num1,str1,num2,num3,str2)=>{


    }