Typescript學(xué)習(xí)之接口interface舉例詳解
一、interface的基本含義
TS新增了一個重要概念:接口, 分為對象類型接口和函數(shù)類型接口
接口可以約束對象,函數(shù),類的結(jié)構(gòu)和類型,是一種代碼協(xié)作必須遵守的契約
Interface 是一種描述對象或函數(shù)的東西。你可以把它理解為形狀,一個對象需要有什么樣的屬性,函數(shù)需要什么參數(shù)或返回什么樣的值,數(shù)組應(yīng)該是什么樣子的,一個類和繼承類需要符合什么樣的描述等等。接下來具體講解對象類型接口、函數(shù)類型接口及混合類型接口。
二、對象類型接口
接口中可定義以下屬性:
確定屬性、可選屬性、只讀屬性、任意屬性(可以通過 as 或 [propName: string]: any 來制定可以接受的其他額外屬性)
這里我們舉得例子是在vue3中實現(xiàn)的:
interface Person { age: number,// 確定屬性 name?: string,// 可選屬性(加問號即可) [propName: string]: any,// 任意屬性 readonly sex: string,// 只讀屬性 } // 使用接口 const p = ref<Person>({ age: 20,// 確定屬性,不寫會報錯 sex: '女',// 只讀屬性也是確定屬性,不寫會報錯 label1: '班花',// 任意屬性1 label2: '165',// 任意屬性2 })
三、函數(shù)類型接口
Interface 還可以用來規(guī)范函數(shù)的形狀。Interface 里面需要列出參數(shù)列表返回值類型的函數(shù)定義。寫法如下:
- 定義了一個函數(shù)接口
- 接口接收三個參數(shù)并且不返回任何值
- 使用函數(shù)表達(dá)式來定義這種形狀的函數(shù)
// 函數(shù)類型接口 interface Func { // 定于這個函數(shù)接收兩個必選參數(shù)都是 number 類型,以及一個可選的字符串參數(shù) desc, // 這個函數(shù)不返回任何值 (x: number, y: number, desc?: string): number } // 使用 const sum: Func = function (x, y, desc = '') { // 等價于const sum: Func = function (x: number, y: number, desc: string): void { console.log(desc, x + y) } console.log(sum(1, 2))
四、類 interface
Interface 也可以用來定義一個類的形狀。需要注意的是類 Interface 只會檢查實例的屬性,靜態(tài)屬性是需要額外定義一個 Interface;
定義類時,可以使類去實現(xiàn)一個接口
實現(xiàn)接口就是使類滿足接口的要求
// 接口繼承接口:繼承一個新的接口或者類,從父類或者接口繼承所有的屬性和方法 // 不可以重寫屬性,但可以重寫方法 interface classPerson extends Person1 { //在繼承的基礎(chǔ)上新找了個了一個teach方法,且返回值是string類型 teach(): string; } // 類實現(xiàn)接口implements:實現(xiàn)一個新的類,從父類活接口實現(xiàn)所有的屬性和方法, // 同時可以重寫屬性和方法,包含一些新的功能 class classPerson2 implements Person1 { age = 20 name = 'suosuo' sex = '女' say() { return '我的全名是小鎖' } }
五、混合類型的 Interface
混合類型的接口就是使用同一個 Interface 來描述函數(shù)或者對象的屬性或方法。
// 混合類型接口 interface MixType { // 如果只有這么一個,那么這個接口是函數(shù)接口 (x: number, y: number): number, // 還含有其他方法,那么這個接口就是混合接口 add(x: number, y: number): number, // 還有另一個方法 log(): void, (): void } // 調(diào)用 function sum() { let sum: MixType = (() => { }) as MixType; sum.add = (x: number, y: number) => { return x + y } sum.log = () => { } } const isShowModal = ref(false) function open() { isShowModal.value = true }
六、總結(jié)
- 接口就是用來定義一個類結(jié)構(gòu),定義一個類中應(yīng)該包含哪些屬性和方法,同時接口也可以當(dāng)成類型聲明去使用
- 接口中的所有的屬性都不能有實際的值
- 接口只定義對象的結(jié)構(gòu),而不考慮實際值
- 在接口中所有的方法都是抽象方法
到此這篇關(guān)于Typescript學(xué)習(xí)之接口interface的文章就介紹到這了,更多相關(guān)Typescript接口interface內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!