接口方法
方法名(参数列表): 返回值类型
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{
}
子类型的变量可以赋值给父类型(祖先类型)变量
父类型(祖先类型)变量不能赋值给子变量