精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

TypeScript 中 Interface 與 Type 的區別?該用哪個比較好?

開發 前端
類型別名的右邊可以是任何類型,包括基本類型、元祖、類型表達式( & 或 | 等);而在接口聲明中,右邊必須為變量結構。

[[415498]]

本文轉載自微信公眾號「三分鐘學前端」,作者sisterAn。轉載本文請聯系三分鐘學前端公眾號。

接口 與 類型別名 的異同點

相同點

1. 都可以描述對象或函數

  1. // 接口 
  2. interface Sister { 
  3.   name: string; 
  4.   age: number; 
  5.  
  6. interface SetSister { 
  7.   (name: string, age: number): void; 
  8.  
  9. // 類型別名 
  10. type Sister = { 
  11.   name: string; 
  12.   age: number; 
  13. }; 
  14.  
  15. type SetSister = (name: string, age: number) => void; 

2. 都可以擴展

interface 和 type 可以混合擴展,也就是說 interface 可以擴展 type,type 也可以擴展 interface。

但需要注意的是,接口的擴展是繼承( extends )。類型別名的擴展就是交叉類型(通過 & 實現)

  1. // 接口 
  2. interface SisterAn { 
  3.     name: string; 
  4.  
  5. // 類型別名 
  6. type SisterRan = { 
  7.     age: number; 
  1. // 接口擴展接口 
  2. interface Sister extends SisterAn { 
  3.     age: number; 
  1. // 類型別名擴展類型別名 
  2. type SisterPro = SisterRan & { 
  3.     name: string; 
  1. // 接口擴展類型別名 
  2. interface Sister extends SisterRan { 
  3.     name: string; 
  1. // 類型別名擴展接口 
  2. type SisterPro = SisterAn & { 
  3.     age: number; 

區別

官方 中這樣介紹兩者的區別:

Type aliases and interfaces are very similar, and in many cases you can choose between them freely. Almost all features of an interface are available in type, the key distinction is that a type cannot be re-opened to add new properties vs an interface which is always extendable.

意思就是說幾乎接口的所有特性都可以通過類型別名來實現,主要區別在于:

1. 不同的聲明范圍

與接口不同,可以為任意的類型創建類型別名

類型別名的右邊可以是任何類型,包括基本類型、元祖、類型表達式( & 或 | 等);而在接口聲明中,右邊必須為變量結構。例如,下面的類型別名就不能轉換成接口

  1. type Name = string 
  2. type Text = string | { text: string }; 
  3. type Coordinates = [number, number]; 

2. 不同的擴展形式

接口是通過繼承的方式來擴展,類型別名是通過 & 來擴展

  1. // 接口擴展 
  2. interface SisterAn { 
  3.     name: string; 
  4. interface Sister extends SisterAn { 
  5.     age: number; 
  6.  
  7. // 類型別名擴展 
  8. type SisterRan = { 
  9.     age: number; 
  10. type SisterPro = SisterRan & { 
  11.     name: string; 

這里需要注意的是,接口擴展時,typescript 會檢查擴展的接口是否可以賦值給被擴展的接口

  1. // 接口擴展 
  2. interface SisterAn { 
  3.     name: string; 
  4.     age: string 
  5.  
  6. interface Sister extends SisterAn { 
  7.     name: string; 
  8.     age: number; 
  9. // 報錯: 
  10. //  Interface 'Sister' incorrectly extends interface 'SisterAn'
  11. //  Types of property 'age' are incompatible. 
  12. //  Type 'number' is not assignable to type 'string' 

但使用交集類型時就不會出現這種情況

  1. // 類型別名擴展 
  2. type SisterRan = { 
  3.  name: string; 
  4.     age: string; 
  5. type SisterPro = SisterRan & { 
  6.     name: string; 
  7.     age: number; 

類型別名擴展時,typescript 將盡其所能把擴展和被擴展的類型組合在一起,而不會拋出編譯時錯誤

3. 不同的重復定義表現形式

接口可以定義多次,多次的聲明會自動合并

  1. interface Sister { 
  2.     name: string; 
  3. interface Sister { 
  4.     age: number; 
  5.  
  6. const sisterAn: Sister = { 
  7.     name'sisterAn' 
  8. }  
  9. // 報錯:Property 'age' is missing in type '{ name: string; }' but required in type 'Sister' 
  10.  
  11. const sisterRan: Sister = { 
  12.     name'sisterRan',  
  13.     age: 12 
  14. // 正確 

但是類型別名如果定義多次,會報錯

  1. type Sister = { // Duplicate identifier 'Sister' 
  2.     name: string; 
  3.  
  4. type Sister = { // Duplicate identifier 'Sister' 
  5.     age: number; 

如何選擇 Interface 、 Type

雖然 官方 中說幾乎接口的所有特性都可以通過類型別名來實現,但建議優先選擇接口,接口滿足不了再使用類型別名,在 typescript 官網 Preferring Interfaces Over Intersections 有說明,具體內容如下:

大多數時候,對象類型的簡單類型別名的作用與接口非常相似

  1. interface Foo { prop: string } 
  2.  
  3. type Bar = { prop: string }; 

但是,一旦你需要組合兩個或多個類型來實現其他類型時,你就可以選擇使用接口擴展這些類型,或者使用類型別名將它們交叉在一個中(交叉類型),這就是差異開始的時候。

接口創建一個單一的平面對象類型來檢測屬性沖突,這通常很重要! 而交叉類型只是遞歸的進行屬性合并,在某種情況下可能產生 never 類型

接口也始終顯示得更好,而交叉類型做為其他交叉類型的一部分時,直觀上表現不出來,還是會認為是不同基本類型的組合。

接口之間的類型關系會被緩存,而交叉類型會被看成組合起來的一個整體。

最后一個值得注意的區別是,在檢查到目標類型之前會先檢查每一個組分。

出于這個原因,建議使用接口/擴展擴展類型而不是創建交叉類型。

  1. - type Foo = Bar & Baz & { 
  2. -     someProp: string; 
  3. - } 
  4. + interface Foo extends Bar, Baz { 
  5. +     someProp: string; 
  6. + } 

簡單的說,接口更加符合 JavaScript 對象的工作方式,簡單的說明下,當出現屬性沖突時:

  1. // 接口擴展 
  2. interface Sister { 
  3.     sex: number; 
  4.  
  5. interface SisterAn extends Sister { 
  6.     sex: string; 
  7. // index.ts(5,11): error TS2430: Interface 'SisterAn' incorrectly extends interface 'Sister'
  8. //  Types of property 'sex' are incompatible. 
  9. //    Type 'string' is not assignable to type 'number'
  1. // 交叉類型 
  2. type Sister1 = { 
  3.     sex: number; 
  4.  
  5. type Sister2 = { 
  6.     sex: string; 
  7.  
  8. type SisterAn = Sister1 & Sister2; 
  9. // 不報錯,此時的 SisterAn 是一個'number & string'類型,也就是 never 

來源:https://github.com/Advanced-Frontend/Daily-Interview-Question

 

責任編輯:武曉燕 來源: 三分鐘學前端
相關推薦

2022-09-02 09:02:44

TypeInterface

2022-05-06 09:21:21

TypeScriptinterfacetype

2021-11-30 23:01:51

編程語言數據Python

2021-11-11 07:02:33

類型函數調用

2019-08-28 15:38:04

Linux系統工具

2021-11-05 07:13:46

Python

2022-04-07 08:20:22

typeinterface前端

2025-03-07 08:44:47

Typescriptiinterfacetype

2021-06-23 08:01:18

TypeScript interface type

2020-01-17 13:33:42

大數據分析師大數據工程師

2021-03-15 14:09:49

電腦軟件安全

2010-03-29 17:38:18

CentOS源代碼

2018-06-16 14:32:16

無線路由器單頻雙頻

2020-09-23 09:08:05

typescript

2015-01-08 22:06:18

2020-06-30 09:10:35

編程學習技術

2009-09-15 09:24:42

思科認證考試思科認證

2022-03-13 23:31:13

JavaScript工具動畫庫

2020-11-18 09:26:52

@property裝飾器代碼
點贊
收藏

51CTO技術棧公眾號

在线电影福利片| 中文字幕免费高清在线观看| 露出调教综合另类| 色噜噜久久综合| 最新精品视频| 天天爱天天干天天操| 日本成人在线视频网站| 欧美日韩成人精品| 99久久人妻无码精品系列| 色999久久久精品人人澡69| 亚洲一区二区三区在线看| 免费99视频| 精品国自产在线观看| 国产精品视频| 久久视频这里只有精品| 搡老熟女老女人一区二区| 国产精品久久久久久久久免费高清| 亚洲视频精选在线| 日本不卡久久| 丰满肉嫩西川结衣av| 欧美aaa在线| 538国产精品一区二区在线| 久久国产波多野结衣| 国产99亚洲| 精品国产青草久久久久福利| 狠狠操狠狠干视频| 亚洲最大成人| 亚洲国产成人av网| 爱爱爱视频网站| 国产鲁鲁视频在线观看免费| 成人一区二区三区视频| 成人性生交大片免费观看嘿嘿视频| 日韩精品视频免费看| 婷婷激情图片久久| 亚洲天堂网站在线观看视频| 你懂的在线观看网站| 久久av偷拍| 欧美区一区二区三区| 免费观看成人在线视频| 在线天堂新版最新版在线8| 亚洲午夜日本在线观看| 亚洲免费视频播放| 日本成a人片在线观看| 欧美激情一区二区在线| 欧美一区二区三区在线播放| 手机福利小视频在线播放| 成人性生交大片免费看视频在线| 亚洲曰本av电影| 国产精品欧美久久久久天天影视| 人禽交欧美网站| 国产精品精品视频| 欧美高清69hd| 免费观看成人鲁鲁鲁鲁鲁视频| 日本一区二区在线播放| 国产午夜精品久久久久| 久久精品一区| 国产精品久久久久免费a∨大胸| 黑人精品无码一区二区三区AV| 亚洲综合国产| 国产精品成人一区二区| 精品一区二区无码| 美女视频网站久久| 国产日韩欧美黄色| 国产精品视频一二区| 国产精品一区免费在线观看| 成人18视频| 五月天婷婷在线播放| 91麻豆福利精品推荐| 日韩免费一区二区三区| 香蕉视频在线免费看| 亚洲欧美另类小说| 国产爆乳无码一区二区麻豆| а√天堂中文资源在线bt| 欧美日韩国产专区| 亚洲激情在线观看视频| www.久久草.com| 亚洲第一免费网站| 国产男男chinese网站| 成人高清电影网站| 久久影院免费观看| 国产精品成人国产乱| 国产欧美丝祙| 国产一区玩具在线观看| 亚洲成人精品女人久久久| 99re热视频精品| 亚洲va久久久噜噜噜久久狠狠| 蜜桃视频网站在线观看| 亚洲国产一区二区三区| 黄色一级免费大片| 九色精品蝌蚪| 亚洲视频国产视频| 亚洲天堂黄色片| 99国产精品久久久久久久| 国产精品久久久久久久久久尿| 国产又粗又猛又爽又黄视频| 成人久久视频在线观看| 涩涩日韩在线| 岛国毛片av在线| 欧美日韩在线三区| 亚洲欧美高清在线| 青青草综合网| 午夜欧美大片免费观看| 中文字字幕在线观看| 成人手机在线视频| 性欧美大战久久久久久久免费观看| 羞羞的网站在线观看| 在线精品视频一区二区三四 | 视频一区中文字幕国产| 亚洲va码欧洲m码| 巨骚激情综合| 性做久久久久久| 亚洲三级在线观看视频| 你懂的视频欧美| 久久久久久97| 国产乱淫a∨片免费观看| 久久久影视传媒| 青青草视频在线视频| 激情久久一区二区| 亚洲欧美成人在线| 国产极品在线播放| 国内欧美视频一区二区| 视频一区免费观看| 在线观看网站免费入口在线观看国内 | 国产人妻精品一区二区三| 91视视频在线观看入口直接观看www | 黄色a一级视频| 国产在线日韩| 91亚洲精品一区二区| www.在线播放| 色婷婷综合久色| 日本xxxx裸体xxxx| 国产精品第十页| 亚洲xxxx视频| 好操啊在线观看免费视频| 欧美午夜一区二区三区免费大片| 波多野结衣影院| av成人天堂| 国产66精品久久久久999小说| 超鹏97在线| 6080日韩午夜伦伦午夜伦| 亚洲一区二区自偷自拍| 久久久久网站| 欧美日韩精品中文字幕一区二区| av影院在线免费观看| 欧美不卡一区二区三区四区| 欧美成人精品欧美一级| 国产乱国产乱300精品| 午夜啪啪福利视频| 伊人久久一区| 美日韩精品视频免费看| 性做久久久久久久| 亚洲精品视频一区| 妖精视频在线观看| 国产一区久久| 精品综合在线| 成人欧美magnet| 亚洲色图日韩av| 亚洲精品一区二区二区| 国产精品不卡在线观看| 亚洲天堂网站在线| 狠狠入ady亚洲精品| 国产一区二区三区高清| 亚洲精品mv| 色婷婷综合久久久久中文字幕1| 91片黄在线观看喷潮| 伊人色综合久久天天| 国产+高潮+白浆+无码| 亚洲欧美久久久| 日韩高清三级| 国产精品3区| 久久久噜久噜久久综合| 男人的天堂av高清在线| 精品视频一区 二区 三区| 老熟妇高潮一区二区三区| 国产高清精品久久久久| 久久综合九色综合88i| 精品一区二区三区在线| 91午夜在线播放| 91美女精品| 尤物精品国产第一福利三区| 国产毛片在线视频| 精品久久久久久电影| 亚洲一级片在线播放| 国产精品一区在线观看乱码 | 欧美成人ⅴideosxxxxx| 日韩中文av在线| 韩国av在线免费观看| 色偷偷88欧美精品久久久| 久久免费看少妇高潮v片特黄| 成人丝袜高跟foot| 男人搞女人网站| 黄色成人精品网站| 三区精品视频| 伊人www22综合色| 国产精品xxx视频| 丝袜美腿av在线| 国产亚洲精品美女久久久| 精品国产伦一区二区三| 欧洲精品中文字幕| 中文字幕一区二区三区手机版| 国产欧美一区二区精品性色| 国偷自产av一区二区三区麻豆| 三级在线观看一区二区 | 国产精品久久久一区二区| 一本色道久久综合亚洲精品婷婷| 蜜桃久久久久| 91精品网站| 欧美另类激情| 日本不卡高字幕在线2019| 欧美男男video| 日韩在线视频观看正片免费网站| 五月天激情婷婷| 日韩欧美专区在线| 一区精品在线观看| 欧美性xxxxx极品| 国产极品在线播放| 亚洲欧美激情小说另类| avhd101老司机| 久久婷婷久久一区二区三区| 亚洲视频天天射| 国产一区二区不卡| 高清av免费看| 青青草91视频| 91蝌蚪视频在线观看| 在线亚洲观看| 免费看欧美一级片| 欧美黄色大片网站| 久久av秘一区二区三区| 欧美天天综合| 日韩一区国产在线观看| 视频国产一区| 日本在线成人一区二区| 综合伊思人在钱三区| 蜜桃av久久久亚洲精品| 日韩免费电影在线观看| 国产中文一区二区| 国产厕拍一区| 国产一区二区三区无遮挡| 亚洲不卡视频| 国产不卡一区二区在线观看| 国产精品一区二区三区四区在线观看 | 毛片在线免费播放| 色天天综合色天天久久| 日韩电影在线观看一区二区| 色综合久久久久久久久| 日韩精品一区二区在线播放 | jlzzjlzz亚洲女人18| 欧美精品久久久久久久久老牛影院| 在线观看亚洲一区二区| 欧美肥妇毛茸茸| 国产成人麻豆精品午夜在线| 日韩一本二本av| 亚洲精选一区二区三区| 精品成人在线观看| 亚洲欧美日韩免费| 亚洲欧洲在线观看| 成人欧美亚洲| 精品国偷自产在线| 污污的视频在线观看| 久久久免费在线观看| 欧美男人天堂| 国产精品久久91| 国产高清精品二区| 国产精品播放| 国产a久久精品一区二区三区 | 第一福利在线视频| 青青久久av北条麻妃黑人| 成人免费毛片嘿嘿连载视频…| 国产精品一区二区久久久久| 国产一区二区三区免费在线| 国产精品一区二区三区免费观看| 午夜精品福利影院| 亚洲欧美日韩精品在线| 国精品一区二区三区| 欧美一级片中文字幕| 黄页网站大全一区二区| 超碰caoprom| 欧美国产一区在线| 国产av 一区二区三区| 午夜视频在线观看一区| 精品视频一二三区| 欧美一级午夜免费电影| 人妻妺妺窝人体色www聚色窝| 亚洲色图日韩av| 五月花成人网| 91高潮精品免费porn| 小说区图片区亚洲| 国产一区二区三区无遮挡| 欧美www视频在线观看| 欧美一级视频在线播放| 日韩和欧美一区二区三区| xxx中文字幕| www成人在线观看| 一区二区在线观看免费视频| 欧美午夜激情在线| www.日本在线观看| 亚洲最新av在线网站| 国产探花视频在线观看| 国产精品亚洲欧美导航| 黑色丝袜福利片av久久| 偷拍盗摄高潮叫床对白清晰| 欧美专区在线| jjzzjjzz欧美69巨大| 国产精品天干天干在观线| 国产成人无码精品久在线观看| 欧美精品自拍偷拍动漫精品| 日夜干在线视频| 九色精品免费永久在线| 国产亚洲欧美日韩精品一区二区三区| 国产伦精品一区二区三区四区视频| 成人3d动漫在线观看| 黄色www网站| 国产一区不卡在线| 国产第一页精品| 一本色道久久综合狠狠躁的推荐 | 女人色极品影院| 九色porny丨国产精品| 亚洲熟妇一区二区三区| 亚洲国产精品久久艾草纯爱| 99热这里只有精品99| 最近2019年中文视频免费在线观看| 高清av不卡| 精品在线一区| 亚洲国产精品一区| 久久发布国产伦子伦精品| 亚洲欧洲一区二区在线播放| 美女黄页在线观看| 亚洲人av在线影院| 中文字幕在线看片| 精品一区久久久| 国产精品日韩久久久| 国产高清成人久久| 亚洲成人免费看| 丰满少妇被猛烈进入| 欧美国产精品va在线观看| 精品国产乱码一区二区三区 | 黑人と日本人の交わりビデオ| 日韩欧亚中文在线| 欧美日韩在线中文字幕| 热久久免费国产视频| 天天做夜夜做人人爱精品 | 日产福利视频在线观看| 国产精品果冻传媒潘| 亚洲国产专区校园欧美| 欧产日产国产精品98| 亚洲国产成人精品视频| 五月天福利视频| 日本欧美国产在线| 欧美精选一区二区三区| 天天操天天爽天天射| 国产精品理论片| 国产又黄又猛又爽| 大胆欧美人体视频| 91亚洲精品视频在线观看| 国产精品入口芒果| 91在线观看一区二区| 无码人妻丰满熟妇区bbbbxxxx| 亚洲偷欧美偷国内偷| 九七影院97影院理论片久久| 影音先锋男人的网站| 国产成人高清在线| 日本一区二区网站| 亚洲人成网站在线播| 国产成人精品一区二区三区在线 | 欧亚在线中文字幕免费| 欧美精品免费观看二区| 青青草国产精品亚洲专区无| 国产探花在线视频| 精品国产一区二区三区不卡| 欧美freesex黑人又粗又大| 日韩av在线一区二区三区| 极品少妇xxxx偷拍精品少妇| 久久久久无码国产精品不卡| 精品亚洲永久免费精品| 日韩一级二级| 国产激情片在线观看| 91在线观看视频| 国产一区二区在线视频观看| 久久久久一本一区二区青青蜜月| 伊人久久大香线蕉av不卡| 亚洲精品永久视频| 精品成人av一区| 麻豆视频在线观看免费网站| 国产日韩一区二区| 美腿丝袜在线亚洲一区| 久久国产精品二区| 一区二区成人av| 好吊妞国产欧美日韩免费观看网站| 日本成人在线免费视频| 亚洲激情av在线| 最新电影电视剧在线观看免费观看| 99久热re在线精品996热视频 | 国产精品久久中文| 欧美日本二区| 亚洲精品国产精品国自| 亚洲第一中文字幕| 日日夜夜亚洲精品| 99re在线视频免费观看| 亚洲宅男天堂在线观看无病毒| 成人精品福利|