接口方法
方法名(參數(shù)列表): 返回值類型
interface IPerson{
speak(): void; //定義接口方法斗搞,
speak2:() => void; //定義屬性
}
方法和屬性之間的區(qū)別在于 屬性可以使用readonly 來(lái)修飾器紧。在編輯器中調(diào)用是會(huì)提示那個(gè)是屬性那個(gè)是方法螃概。
函數(shù)類型接口
interface IPerson{
(): void;
}
const james:IPerson = ()=>{
console.log("函數(shù)類型接口");
};
james();
接口函數(shù)可以聲明為接口重載函數(shù)類型
interface IPerson{
(url: string): void;
(url: string, config: unknown);
}
//下面可以實(shí)現(xiàn)一下
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};
混合函數(shù)對(duì)象類型
TypeScript的對(duì)象可以同時(shí)做為函數(shù)和對(duì)象使用砍聊,并帶有額外的屬性丈氓。使用接口聲明混合函數(shù)對(duì)象 以初始化為示例
//聲明接口
interface IPerson{
(): void; //沒(méi)有方法名的方法
readonly dome: boolean; //判斷是否初始化
}
// js中 (function init(){})() //表示立即執(zhí)行行數(shù)
const init = (()=>{
function __init(): void{
if(__init.deom ){
console.log("已經(jīng)初始化過(guò)了");
return软免;
}
console.log("初始化");
__init.deom = true;
}
return __init;
})();
IPerson 里面可以定義方法宫纬,也可以定義屬性。定義的方法必須要實(shí)現(xiàn)
接口的繼承
接口繼承在聲明接口的時(shí)候 使用 extends 關(guān)鍵字 膏萧,繼承多個(gè)接口 以都好區(qū)分漓骚。
interface IPerson{
name: string,
age: number
}
interface IApp{
type: string
}
interface ICode extends IPerson,IApp{
}
子類型的變量可以賦值給父類型(祖先類型)變量
父類型(祖先類型)變量不能賦值給子變量