TypeScript 混合型別介面
在前面的文章已經介紹,介面可以描述函式、物件的方法或者物件的屬性。
有時希望一個物件同時具有上面提到多種型別,比如一個物件可以當做函式使用,同時又具有屬性和方法。
程式碼例項如下:
[typescript] 純文字檢視 複製程式碼interface Counter { (start: number): string; interval: number; reset(): void; } function getCounter(): Counter { let counter = <Counter>function (start: number) { }; counter.interval = 123; counter.reset = function () { }; return counter; } let c = getCounter(); c(10); c.reset(); c.interval = 5.0;
下面對程式碼進行一下分析:
[typescript] 純文字檢視 複製程式碼interface Counter { (start: number): string; interval: number; reset(): void; }
宣告一個介面,如果只有(start: number): string一個成員,那麼這個介面就是函式介面,同時還具有其他兩個成員,可以用來描述物件的屬性和方法,這樣就構成了一個混合介面。
[typescript] 純文字檢視 複製程式碼function getCounter(): Counter { // code }
建立一個函式,它的返回值是Counter型別的。
[typescript] 純文字檢視 複製程式碼let counter = <Counter>function (start: number) { };
通過型別斷言,將函式物件轉換為Counter型別,轉換後的物件不但實現了函式介面的描述,使之成為一個函式,還具有interval屬性和reset()方法。斷言成功的條件是,兩個資料型別只要有一方可以賦值給另一方,這裡函式型別資料不能賦值給介面型別的變數,因為它不具有interval屬性和reset方法;那只有介面型別資料賦值給函式型別變數是成立的,也就是:
[typescript] 純文字檢視 複製程式碼(start: number): string;
具有此簽名和返回值的函式可以賦值給如下簽名和返回值的函式:
[typescript] 純文字檢視 複製程式碼(start: number) : void
特別說明:函式簽名相同,返回值非void型別的函式可以賦值給返回值是void型別的函式。
相關文章
- typescript 介面和物件型別(四)TypeScript物件型別
- 淺談TypeScript型別、介面、裝飾器TypeScript型別
- TypeScript 介面TypeScript
- TypeScript--介面TypeScript
- TypeScript(4)介面TypeScript
- TypeScript 函式介面TypeScript函式
- TypeScript中的介面TypeScript
- TypeScript 介面繼承TypeScript繼承
- 融合模型分為四種型別(包括混合型)模型型別
- [譯]Typescript : 類 vs 介面TypeScript
- TypeScript 類實現介面TypeScript
- TypeScript 介面繼承類TypeScript繼承
- TypeScript this型別TypeScript型別
- TypeScript type 型別別名TypeScript型別
- typescript探索(二)- 介面與類TypeScript
- TypeScript 介面 只讀屬性TypeScript
- TypeScript 介面 可選屬性TypeScript
- TypeScript介面與類的使用TypeScript
- Typescript:基本型別TypeScript型別
- TypeScript Widened型別TypeScriptIDE型別
- TypeScript Never型別TypeScript型別
- TypeScript Any型別TypeScript型別
- TypeScript 索引型別TypeScript索引型別
- TypeScript 型別相容TypeScript型別
- TypeScript 交叉型別TypeScript型別
- TypeScript void 型別TypeScript型別
- TypeScript 字串型別TypeScript字串型別
- TypeScript 型別安全TypeScript型別
- 7-1 混合型別資料格式化輸入型別
- TypeScript入門3:介面、多型TypeScript多型
- TypeScript 聯合型別TypeScript型別
- TypeScript 數值型別TypeScript型別
- TypeScript 布林型別TypeScript型別
- Typescript高階型別TypeScript型別
- TypeScript 泛型型別TypeScript泛型型別
- TypeScript 對映型別TypeScript型別
- TypeScript 函式型別TypeScript函式型別
- TypeScript資料型別TypeScript資料型別