接口与函数

接口方法

方法名(参数列表): 返回值类型

interface IPerson{
   speak(): void; //定义接口方法,
   speak2:() => void; //定义属性
}

方法和属性之间的区别在于 属性可以使用readonly 来修饰。在编辑器中调用是会提示那个是属性那个是方法。

函数类型接口

interface IPerson{
  (): void;
}

const james:IPerson = ()=>{
  console.log("函数类型接口");
};

james();

接口函数可以声明为接口重载函数类型

interface IPerson{
  (url: string): void;
  (url: string, config: unknown);
}

//下面可以实现一下
function mackRequest(url: string, config: unknown): void;
function mackRequest(config:unknown) : void;
function mackRequest(url: string, config: unknown): void{
  
}

const james: IPerson = mackRequest;
export {james};

混合函数对象类型

TypeScript的对象可以同时做为函数和对象使用,并带有额外的属性。使用接口声明混合函数对象 以初始化为示例

//声明接口
interface IPerson{
  (): void;       //没有方法名的方法
  
  readonly dome: boolean; //判断是否初始化
}

// js中 (function init(){})()   //表示立即执行行数
const init = (()=>{
  function __init(): void{
    if(__init.deom ){
      console.log("已经初始化过了");
      return;
    }
    console.log("初始化");
    __init.deom = true;
  }
  return __init;
})();

IPerson 里面可以定义方法,也可以定义属性。定义的方法必须要实现

接口的继承

接口继承在声明接口的时候 使用 extends 关键字 ,继承多个接口 以都好区分。

interface IPerson{
  name: string,
  age: number
}

interface IApp{
  type: string
}

interface ICode extends IPerson,IApp{
   
}

子类型的变量可以赋值给父类型(祖先类型)变量
父类型(祖先类型)变量不能赋值给子变量

你可能感兴趣的:(接口与函数)