最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TypeScript?接口繼承的具體使用

 更新時間:2022年07月07日 08:22:18   作者:楚楚99  
本文主要介紹了TypeScript?接口繼承的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、TypeScript 接口繼承

和類一樣,接口也可以通過關(guān)鍵字 extents 相互繼承。接口繼承,分為:單繼承和多繼承,即繼承多個接口。另外,接口也可以繼承類,它會繼承類的成員,但不包括具體的實現(xiàn),只會把類的成員作為一種聲明。本文主要總結(jié)一下TypeScript 接口繼承,方便大家進行系統(tǒng)化的學(xué)習(xí)。

2、單繼承

interface Shape {
   name: string;
}

interface Circle extends Shape {
   radius: number;
}

let circle = {} as Circle;
 
// 繼承了 Shape 的屬性
circle.name = "circle";

circle.radius = 10;

3、多繼承

接口能夠像類一樣對接口進行繼承,但不同的是類只能是單繼承,而接口既可以實現(xiàn)單繼承也可以多繼承,多個接口以逗號分隔。

interface Color {
   color: string;
}

interface Shape {
   name: string;
}

interface Circle extends Color, Shape {
   radius: number;
}

當(dāng)一個接口繼承了其他接口后,子接口既包含了自身定義的類型成員,也包含了父接口中的類型成員。下例中,Circle接口同時繼承了Style接口和Shape接口,因此Circle接口中包含了color、name和radius屬性:

const c: Circle = {
   color: 'red',
   name: 'circle',
   radius: 10
};

4、接口繼承中的同名成員的兼容問題

在接口繼承中,可能會出現(xiàn)同名成員,面對同名成員這種情況,怎么處理呢?主要分為以下兩種情況:

4.1、同名成員的類型必須兼容

如果子接口與父接口之間存在同名的類型成員,那么子接口中的類型成員具有更高的優(yōu)先級。同時,子接口與父接口中的同名類型成員必須是類型兼容的。也就是說,子接口中同名類型成員的類型需要能夠賦值給父接口中同名類型成員的類型,否則將產(chǎn)生編譯錯誤。示例如下:

interface Style {
   color: string;
}

interface Shape {
   name: string;
}

interface Circle extends Style, Shape {
   name: 'circle';
   color: number;
//  ~~~~~~~~~~~~~
//  編譯錯誤:'color' 類型不兼容,
//  'number' 類型不能賦值給 'string' 類型
}

Circle接口同時繼承了Style接口和Shape接口。Circle接口與父接口之間存在同名的屬性name和color。Circle接口中name屬性的類型為字符串字面量類型'circle',它能夠賦值給Shape接口中string類型的name屬性,因此是正確的。而Circle接口中color屬性的類型為number,它不能夠賦值給Color接口中string類型的color屬性,因此產(chǎn)生編譯錯誤。

4.2、同名成員的類型必須相同

如果僅是多個父接口之間存在同名的類型成員,而子接口本身沒有該同名類型成員,那么父接口中同名類型成員的類型必須是完全相同的,否則將產(chǎn)生編譯錯誤。示例如下:

interface Color {
   draw(): { color: string };
}

interface Shape {
   draw(): { x: number; y: number };
}

interface Circle extends Style, Shape {}
//        ~~~~~~
//        編譯錯誤

Circle接口同時繼承了Color接口和Shape接口。Color接口和Shape接口都包含一個名為draw的方法,但兩者的返回值類型不同。當(dāng)Circle接口嘗試將兩個draw方法合并時發(fā)生沖突,因此產(chǎn)生了編譯錯誤。

解決這個問題的一個辦法是,在Circle接口中定義一個同名的draw方法。這樣Circle接口中的draw方法會擁有更高的優(yōu)先級,從而取代父接口中的draw方法。這時編譯器將不再進行類型合并操作,因此也就不會發(fā)生合并沖突。但是要注意,Circle接口中定義的draw方法一定要與所有父接口中的draw方法是類型兼容的。示例如下:

interface Color {
   draw(): { color: string };
}

interface Shape {
   draw(): { x: number; y: number };
}

interface Circle extends Color, Shape {
   draw(): { color: string; x: number; y: number };
}

Circle接口中定義了一個draw方法,它的返回值類型為“{ color: string; x: number; y: number }”。它既能賦值給“{ color: string }”類型,也能賦值給“{ x: number; y: number }”類型,因此不會產(chǎn)生編譯錯誤。

5、接口繼承類

接口可以對類實現(xiàn)繼承,但只能繼承類的成員,不會繼承類成員的實現(xiàn)。

class Person{
       name:string = 'Tom'
       age: number = 20
       sayHello():void{
              console.log('Hello world');
       }
}

interface IPerson extends Person{

}
class Peter extends Person implements IPerson{}

上述代碼不會報錯,因為Peter類繼承了Person類,已經(jīng)具有了Person中的成員,再去實現(xiàn)IPerson接口,即使不寫內(nèi)容也不會報錯

class Gary implements IPerson{}

上述代碼會報錯,直接實現(xiàn)接口就會報錯,因為接口繼承了Person類,所以接口中的屬性也應(yīng)該在類Yannis中定義并實現(xiàn)

6、參考

http://www.mybatis.cn/typescript/1981.html

到此這篇關(guān)于TypeScript 接口繼承的文章就介紹到這了,更多相關(guān)TypeScript 接口繼承內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript中find()和?filter()方法的區(qū)別小結(jié)

    JavaScript中find()和?filter()方法的區(qū)別小結(jié)

    js中find和filter方法大家在工作中會經(jīng)常遇到,那么他們有什么區(qū)別呢?這篇文章主要給大家介紹了關(guān)于JavaScript中find()和?filter()方法區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • 微信小程序開發(fā)之實現(xiàn)一個跑步小程序

    微信小程序開發(fā)之實現(xiàn)一個跑步小程序

    本文將開發(fā)一個簡易的微信跑步小程序,用到的方法是wx.onLocationChange,可以監(jiān)聽實時地理位置變化事件,感興趣的小伙伴可以了解一下
    2022-08-08
  • 淺談uniapp頁面跳轉(zhuǎn)的解決方案

    淺談uniapp頁面跳轉(zhuǎn)的解決方案

    頁面跳轉(zhuǎn)是經(jīng)常需要用到的,本文主要介紹了淺談uniapp頁面跳轉(zhuǎn)的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • js實現(xiàn)無縫滾動圖(可控制當(dāng)前滾動的方向)

    js實現(xiàn)無縫滾動圖(可控制當(dāng)前滾動的方向)

    本文主要分享了js實現(xiàn)無縫滾動圖的示例代碼,這個版本可以控制左右滾動,鼠標點擊對應(yīng)的廣告會自動滑動把廣告完全展示出來,當(dāng)鼠標離開,接著繼續(xù)滾動。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • js判斷日期時間有效性的方法

    js判斷日期時間有效性的方法

    這篇文章主要介紹了判斷js驗證日期時間有效性的方法,需要的朋友可以參考下
    2015-10-10
  • JavaScript Canvas編寫炫彩的網(wǎng)頁時鐘

    JavaScript Canvas編寫炫彩的網(wǎng)頁時鐘

    這篇文章主要為大家詳細介紹了JavaScript Canvas編寫炫彩的網(wǎng)頁時鐘,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Js操作樹節(jié)點自動折疊展開的幾種方法

    Js操作樹節(jié)點自動折疊展開的幾種方法

    這篇文章主要介紹了Js操作樹節(jié)點自動折疊展開的幾種方法,需要的朋友可以參考下
    2014-05-05
  • 利用Vconsole和Fillder進行移動端抓包調(diào)試方法

    利用Vconsole和Fillder進行移動端抓包調(diào)試方法

    這篇文章主要介紹了利用Vconsole和Fillder進行移動端抓包調(diào)試,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Bootstrap標簽頁(Tab)插件使用方法

    Bootstrap標簽頁(Tab)插件使用方法

    這篇文章主要為大家詳細介紹了Bootstrap標簽頁(Tab)插件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 基于JavaScript實現(xiàn)百度搜索框效果

    基于JavaScript實現(xiàn)百度搜索框效果

    這篇文章主要為大家詳細介紹了基于JavaScript實現(xiàn)百度搜索框效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論

宜丰县| 临沧市| 安新县| 精河县| 通道| 凤凰县| 兴国县| 永康市| 济阳县| 江都市| 榆中县| 渝中区| 徐水县| 秦皇岛市| 缙云县| 霸州市| 河间市| 崇仁县| 哈巴河县| 盐津县| 盘山县| 黄梅县| 格尔木市| 桦甸市| 安溪县| 会理县| 武川县| 彰武县| 浮梁县| 耒阳市| 河源市| 丽水市| 鸡东县| 肃宁县| 鲁甸县| 隆安县| 三明市| 汝城县| 翁牛特旗| 德令哈市| 青川县|