精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品美女久久| 欧洲黄色一区| 韩国毛片一区二区三区| 色综合91久久精品中文字幕| 中国黄色片视频| 国产精品一区二区av影院萌芽| 亚洲国产成人在线| 97人人模人人爽人人少妇| 9i看片成人免费看片| 久久在线视频| 亚洲国产成人精品女人久久久 | 免费看国产精品一二区视频| 在线视频 中文字幕| 91久久久久| www日韩欧美| 国产精品一 二 三| 无码日韩精品一区二区| 亚洲精品a级片| 亚洲欧美国产精品| 337p日本欧洲亚洲大胆张筱雨 | jizz日本免费| av在线成人| 色呦呦国产精品| 大胆欧美熟妇xx| a√资源在线| www.99精品| 91中文在线视频| 日韩熟女一区二区| 亚洲承认在线| 久久视频在线免费观看| 在线免费观看麻豆| 国产一区丝袜| 日韩精品一区二区三区视频在线观看| 国产三级日本三级在线播放| 99爱在线视频| 亚洲一区二区在线免费观看视频| 成人精品福利视频| 欧美一区二区三区不卡视频| 韩日在线一区| 久久亚洲精品成人| 黄色国产在线播放| av亚洲在线观看| 亚洲精品一区二三区不卡| 亚洲一级片免费观看| 国产精品亲子伦av一区二区三区| 欧美午夜精品久久久久久人妖| 免费视频爱爱太爽了| 国产视频中文字幕在线观看| 中文子幕无线码一区tr| 日韩av免费电影| 亚洲av成人精品日韩在线播放| 成人免费高清在线| 成人免费观看网站| 亚洲女人18毛片水真多| 国产精品1区二区.| 91久久大香伊蕉在人线| www.com欧美| 国产激情一区二区三区| 亚洲一区二区久久久久久| 国产精品熟女久久久久久| 黄色资源网久久资源365| 国产一区二区在线免费| 国产精品毛片一区视频播 | 91在线高清| 国产精品乱码人人做人人爱 | 亚洲图片88| 成人免费在线视频| 9191国产视频| 波多野结衣中文在线| 激情懂色av一区av二区av| 国产二区视频在线播放| 成人黄色免费短视频| 欧洲精品在线观看| 思思久久精品视频| 欧美影院在线| 亚洲精品98久久久久久中文字幕| 在线观看日韩精品视频| 欧美日韩高清| 久久久国产精品视频| 激情五月婷婷在线| 99热精品在线| 国产福利精品av综合导导航| 亚洲最新av网站| 顶级嫩模精品视频在线看| 国产主播一区二区三区四区| 成年人视频在线免费观看| 亚洲色大成网站www久久九九| 人人妻人人澡人人爽欧美一区| 手机av在线| 欧美日韩亚洲国产综合| 久久久久99人妻一区二区三区| 日日狠狠久久偷偷综合色| 中文字幕成人在线| 精品在线免费观看视频| 久久尤物视频| 岛国一区二区三区高清视频| 免费看黄色一级视频| 中文成人综合网| www.国产在线播放| 欧美男女交配| 日韩精品一区二区三区四区视频| 久久丫精品忘忧草西安产品| 欧美成人日本| 国产精品日韩专区| 少妇av在线播放| 亚洲欧美日韩综合aⅴ视频| 国产精品无码人妻一区二区在线| 欧洲美女精品免费观看视频| 日韩av中文字幕在线播放| www.xx日本| 久久一综合视频| av成人午夜| 香蕉视频免费在线播放| 欧美体内谢she精2性欧美| 99久久99精品| 精品国产一区一区二区三亚瑟| 欧美激情视频在线观看| 中文字幕久久网| 91欧美一区二区| 久久综合亚洲精品| 日韩亚洲国产免费| 精品亚洲一区二区三区在线观看 | 9999精品成人免费毛片在线看 | 亚洲成av人在线观看| 亚洲av无日韩毛片久久| 加勒比久久综合| 668精品在线视频| 亚洲a视频在线观看| 国产精品美女久久久久久久| 日韩网址在线观看| 给我免费播放日韩视频| 欧美猛交ⅹxxx乱大交视频| 这里只有精品6| 欧美激情一区二区三区四区| 日韩三级电影| 色综合亚洲图丝熟| 亚洲精品99999| 精品一区二区三区四| 国产a久久麻豆| 日韩视频 中文字幕| www.欧美| 久久国产精品免费视频| 99在线精品视频免费观看20| 另类小说欧美激情| 欧美一区二区综合| 成人免费看黄| 精品亚洲一区二区三区在线观看| 日本少妇激情视频| 国产成人午夜高潮毛片| 日韩一级片一区二区| 日韩欧美另类中文字幕| 美女性感视频久久久| 国产裸体永久免费无遮挡| 国产精品国产三级国产有无不卡| 中文字幕第36页| 日韩.com| 国产拍精品一二三| xxxxx日韩| 欧美久久高跟鞋激| 日韩视频中文字幕在线观看| 国产在线精品免费| 超碰超碰超碰超碰超碰| caoporn成人免费视频在线| 欧美精品aaa| 涩涩视频免费看| 日韩欧美国产中文字幕| 久久亚洲无码视频| 麻豆精品一区二区av白丝在线| 亚洲一区二区三区欧美| 国产在线不卡一区二区三区| 欧美激情2020午夜免费观看| 成人午夜免费在线观看| 欧美香蕉大胸在线视频观看| 国产人妻大战黑人20p| 捆绑紧缚一区二区三区视频| 国产经典久久久| 欧美亚洲大陆| 国产精品毛片a∨一区二区三区|国 | 在线成人性视频| 99精品视频在线免费播放| 久久色在线播放| 免费观看成年人视频| 日本久久电影网| 永久免费看片直接| 99精品黄色片免费大全| 精品日韩久久久| 欧美+日本+国产+在线a∨观看| 国产亚洲二区| 美女久久久久久| 国内精品小视频| 91欧美在线视频| 亚洲成人黄色在线观看| 国产乡下妇女三片| 亚洲国产综合91精品麻豆| 中文字幕网站在线观看| 国产一区二区伦理| 日本毛片在线免费观看| 亚洲色图国产| 日本一区免费看| 秋霞午夜一区二区三区视频| 日韩美女在线看| 日本大胆在线观看| 一区二区欧美亚洲| 免费观看的毛片| 欧美精品色一区二区三区| 日韩欧美三级视频| 最新高清无码专区| 亚洲做受高潮无遮挡| 国产精品夜夜嗨| 国产精品一区二区羞羞答答| 国产亚洲在线观看| 精品一区二区三区毛片| 精品一区电影| 精品国产乱码久久久久久88av| 深夜日韩欧美| 国产精品久久av| 91九色在线播放| 日韩视频免费在线观看| 精品福利视频导航大全| 亚洲成人aaa| 国产伦精品一区二区三区四区| 色综合久久久网| 日韩欧美a级片| 亚洲综合一区二区三区| 天堂网中文在线观看| 久久久久久久久99精品| 视频免费在线观看| 国产99久久久国产精品免费看| 中国黄色片一级| 日本午夜一本久久久综合| 久久久久久久中文| 亚洲天堂激情| av影院在线播放| 一区二区电影在线观看| 中文字幕一区二区三区四区五区六区 | 秋霞午夜av一区二区三区| 国产美女三级视频| 一本久道久久综合婷婷鲸鱼| 欧美人成在线观看| 在线精品观看| www精品久久| 韩国在线一区| 国产女主播av| 午夜激情一区| 日韩专区第三页| 中文乱码免费一区二区三区下载| 一区二区三区视频| 99精品视频精品精品视频| 一区二区三视频| 欧美成人激情| 国产精品88久久久久久妇女| 国产一区二区三区自拍| 丰满的少妇愉情hd高清果冻传媒| 国内精品福利| 欧美视频在线观看网站| 午夜在线a亚洲v天堂网2018| 日韩中文字幕免费在线| 蜜臀国产一区二区三区在线播放 | 日韩福利片在线观看| 精品国产成人av| 99超碰在线观看| 欧美性受xxxx黑人xyx| 国产精品久久婷婷| 日韩亚洲欧美成人一区| 视频一区 中文字幕| 亚洲欧美综合另类中字| a中文在线播放| 久久五月天综合| 国产丝袜视频在线播放| 青青久久av北条麻妃海外网| se69色成人网wwwsex| 国产综合在线观看视频| 白白在线精品| 欧美一区二区三区四区五区六区| 99精品综合| 国产美女主播在线| 久久婷婷麻豆| 国产成人美女视频| 高清久久久久久| 亚洲av无码一区二区三区人| **性色生活片久久毛片| 欧美亚洲天堂网| 一本到不卡精品视频在线观看| 亚洲天堂中文网| 欧美大片在线观看一区| 久久久久久青草| 欧美成人高清视频| 日韩免费福利视频| 亚洲专区在线视频| 香蕉精品久久| 18视频在线观看娇喘| 手机福利在线| 天堂成人娱乐在线视频免费播放网站| 久久人人爽亚洲精品天堂| huan性巨大欧美| 日韩视频在线一区二区| 精品人妻一区二区三区含羞草| 麻豆精品99| 久久精品91久久久久久再现| 青草影视电视剧免费播放在线观看| 欧洲成人在线观看| 美女精品久久| 日本精品二区| 精品二区久久| 欧美日韩一区二区三区69堂| 99精品视频免费在线观看| 男人晚上看的视频| 欧美午夜视频在线观看| av男人天堂网| 在线观看欧美日韩国产| 黄色污网站在线观看| 51成人做爰www免费看网站| 宅男在线一区| 欧日韩免费视频| 国产一区二区伦理| 亚洲黄色网址大全| 狠狠色狠色综合曰曰| 亚洲精品喷潮一区二区三区 | 都市激情在线视频| 8x海外华人永久免费日韩内陆视频 | 成人在线高清视频| 91精品国产高清自在线| 一区二区三区免费在线看| 艳母动漫在线观看| 久久av资源网| 国产农村妇女精品一区| 色婷婷综合久色| 亚洲av成人无码久久精品老人 | 亚洲精品黑牛一区二区三区| 亚洲国产精品久久久久久女王| 国产欧美亚洲一区| 日本在线不卡一区二区| 亚洲激情成人在线| 一级做a爰片久久毛片16| 伊人成人开心激情综合网| videos性欧美另类高清| 精品国产福利| 国产日韩欧美在线播放不卡| 艳妇乳肉亭妇荡乳av| 亚洲午夜久久久久久久久久久 | 中文字幕在线播| 精品无人国产偷自产在线| 黄频免费在线观看| 久久综合中文色婷婷| 国产精品美女久久久| 中文字幕无码人妻少妇免费| 午夜精品福利一区二区三区蜜桃| 日本毛片在线观看| **欧美日韩vr在线| 偷拍视屏一区| 毛片av免费在线观看| 久久久99久久精品欧美| 91黑人精品一区二区三区| 在线视频中文亚洲| 国产成人精品一区二区三区免费| 亚洲午夜精品一区二区三区| 精品一区二区三区在线播放视频| 国产精品成人69xxx免费视频| 欧美一区二区三区四区久久| 欧美午夜大胆人体| 久久av一区二区三区漫画| 久久男女视频| 日韩在线视频网址| 精品动漫一区二区三区在线观看| 国产高清视频色在线www| 日本成人三级| 精品午夜久久福利影院| 欧美日韩在线国产| 亚洲精品少妇网址| 欧美与亚洲与日本直播| 国产日本欧美在线| 成人深夜视频在线观看| 国产精品久久久久久久久久久久久久久久久 | 欧美videos粗暴| 日韩欧美一级在线| 91在线视频在线| 中文天堂在线播放| 精品中文字幕乱| 私拍精品福利视频在线一区| 欧美婷婷精品激情| 亚洲综合在线第一页| 国产在线视频网站| 亚洲japanese制服美女| 欧美在线综合| 青娱乐国产在线视频| 亚洲免费人成在线视频观看| 99re8精品视频在线观看| 国产免费黄色一级片| 中文字幕欧美三区| 国产成人三级在线观看视频| 日本高清不卡的在线| 在线观看日韩| 国产人妻大战黑人20p| 精品捆绑美女sm三区| 国精产品一区一区三区四川| 999久久欧美人妻一区二区| 国产亚洲一区二区三区| 国产黄色片网站| 国产精品免费福利| 国产欧美三级|