国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

typescrip接口 interface詳解,以及ts實現(xiàn)多態(tài)

這篇具有很好參考價值的文章主要介紹了typescrip接口 interface詳解,以及ts實現(xiàn)多態(tài)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

ts 接口

當一個對象類型被多次使用時,一般會使用接口(interface)來描述對象的類型,達到復用的目的
示例如下

當一個對象類型被多次使用時,可以看到,很明顯代碼有大量的冗余

let personTom: { name: string, age?: number, sayHi(name: string): void } = {
  name: 'Tom',
  sayHi(name: string) {
    console.log(`Hi, ${name}`)
  }
}
let personJack: { name: string, age?: number, sayHi(name: string): void } = {
  name: 'Tom',
  sayHi(name: string) {
    console.log(`Hi, ${name}`)
  }
}

這個時候可以將這個對象定義為接口,以進行復用,可以看到,這樣代碼就少了很多冗余

interface Person {
  name: string
  age?: number
  sayHi(name: string): void
}
let personTime: Person = {
  name: 'time',
  sayHi(name: string) {
    console.log(`hello ${name}`)
  }
}

let personJohn: Person = {
  name: 'John',
  sayHi(name: string) {
    console.log(`hello ${name}`)
  }
}

  1. 使用interface關鍵字來聲明接口
  2. 接口名稱(比如,此處的Person)可以是任意合法變量名稱
  3. 聲明接口后,直接使用接口名稱作為變量的類型
  4. 因為每一行只有一個屬性類型,因此,屬性類型后沒有分號或逗號

interface 與 type 類型別名的區(qū)別

在 TypeScript中,interface和type都可以用來定義類型的別名

  • 定義方式:type別名可以用來給一個類型起新名字,使用type創(chuàng)建類型別名。它更加靈活,可以用來定義任意類型的別名,包括原始類型、函數(shù)、對象等。而interface則是命名數(shù)據(jù)結構的另一種方式,僅限于描述對象類型,聲明語法也不同于type的聲明語法。
  • 使用范圍:與type不同,interface僅限于描述對象類型。也就是說,interface無法用來定義非對象類型的別名,如原始類型、函數(shù)等。type則沒有這些限制,可以用來定義各種類型的別名。
  • 組合類型:在TypeScript中,type可以使用交叉類型(intersection type)和聯(lián)合類型(union type)來組合多個類型,而interface則不能。這意味著type可以創(chuàng)建更復雜和靈活的類型結構,而interface在這方面的能力較弱。
    總的來說,type和interface在TypeScript中都可以用來定義類型的別名,但它們在定義范圍、組合類型的能力等方面存在明顯的差異。

interface(接口)和type(類型別名)的對比

  • 相同點: 都可以給對象指定類型
  • 不同點:
    - 接口只能為對象指定類型
    - 類型別名,不僅可以為對象指定類型,實際上可以給任意類型指定別名

代碼示例

interface Person {
  name: string
  age?: number
  sayHi(name: string): void
}

type animal = {
  name: string
  age?: number
  sayHi(name: string): void
}

在編譯器中使用,兩者都可以實現(xiàn)對對象的類型監(jiān)測
typescrip接口 interface詳解,以及ts實現(xiàn)多態(tài),typescript,ts接口,ts接口詳解,typescript接口,ts接口繼承,ts繼承多個接口,ts多態(tài),typescript實現(xiàn)多態(tài)

接口的繼承

如果兩個接口之間有相同的屬性或方法,可以將公共的屬性或方法,抽離出來,通過繼承來實現(xiàn)復用
比如,這兩個接口都有x,y兩個屬性,重復寫兩次,可以,但是很繁瑣

	interface Point2D { x: number, y: number }
	interface Point3D { x: number, y: number, z: number }

這個時候就可以使用extends繼承來讓Point3D 繼承Point2D 就可以省去x和y的定義了
如下

	interface Point2D { x: number, y: number }
	// interface Point3D { x: number, y: number, z: number }
	interface Point3D extends Point2D { z: number }

typescrip接口 interface詳解,以及ts實現(xiàn)多態(tài),typescript,ts接口,ts接口詳解,typescript接口,ts接口繼承,ts繼承多個接口,ts多態(tài),typescript實現(xiàn)多態(tài)

tips:

  1. 使用extends(繼承)關鍵字實現(xiàn)了接口Point3D 繼承Point2D
  2. 繼承后,Point3D 就有了Point2D的所有方法和屬性了(此時Point3D 同時有x,y,z三個屬性)
繼承多個接口

一個接口可以繼承多個接口,如下 video3D繼承了video接口和3D接口 ,繼承后,Video3D接口就同時擁有兩個接口的所有屬性和方法了

interface Point2D { x: number, y: number }
// interface Point3D { x: number, y: number, z: number }
interface Point3D extends Point2D { z: number }

interface Video { video: object }

interface Video3D extends Video, Point3D {
  lookAt(target: Point3D): void;
}


let v: Video3D = { video: {}, x: 10, y: 10, z: 10, lookAt: (t) => { } } 

typescript 多態(tài)

先看下面這個例子

interface Animal {  
    name: string;  
    age: number;  
    sound: () => void;  
}  
  
interface Dog extends Animal {  
    breed: string;  
}  
  
let myDog: Dog = {  
    name: "Rex",  
    age: 3,  
    breed: "German Shepherd",  
    sound: () => console.log("Bark!")  
};

在這個例子中,Dog 接口繼承了 Animal 接口。這意味著,Dog 對象必須包含 Animal 接口定義的所有屬性和方法,也就是 name、age 和 sound。然后,Dog 接口還定義了自己的額外屬性,即 breed。
這是一個很有意思的現(xiàn)象,因為這已經(jīng)是靜態(tài)類型語言才能實現(xiàn)多態(tài)的基礎了

如上在 TypeScript 中,接口繼承可以實現(xiàn)多態(tài)性。如果你有一個函數(shù)接受 Animal 類型的參數(shù),那么你也可以傳入一個 Dog 類型的參數(shù),因為 Dog 是 Animal 的子類型。這是基于 Liskov 替換原則,也就是子類型必須能夠替換它們的基類型。
原理有了,開始實現(xiàn)

	//定義基類
	interface Animal {
	  name: string;
	  age: number;
	  sound: () => void;
	}
	
	//定義基礎
	interface Dog extends Animal {
	  breed: string;
	}
	
	let myDog: Dog = {
	  name: "Rex",
	  age: 3,
	  breed: "German Shepherd",
	  sound: () => console.log("Bark!")
	};
	
	//實現(xiàn)多態(tài)
	function polymorphicDisplay(a: Animal) {
	  a.sound();
	}
	
	polymorphicDisplay(myDog);

輸出成功, js牛逼! ,不對ts牛逼
typescrip接口 interface詳解,以及ts實現(xiàn)多態(tài),typescript,ts接口,ts接口詳解,typescript接口,ts接口繼承,ts繼承多個接口,ts多態(tài),typescript實現(xiàn)多態(tài)文章來源地址http://www.zghlxwxcb.cn/news/detail-826368.html

到了這里,關于typescrip接口 interface詳解,以及ts實現(xiàn)多態(tài)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【TypeScript】接口類型 Interfaces 的使用理解

    【TypeScript】接口類型 Interfaces 的使用理解

    導語 : 什么是 類型接口 ? 在面向對象語言中 ,接口 (Interfaces) 是一個很重要的概念,它是對行為的抽象,而具體如何行動需要由類(classes)去實現(xiàn)(implement)。TypeScript 中的 類型接口 是一個非常靈活的概念,除了可用于 對類的一部分行為進行抽象 以外,也常用于對「

    2024年02月15日
    瀏覽(23)
  • TypeScript 中【class類】與 【 接口 Interfaces】的聯(lián)合搭配使用解讀

    TypeScript 中【class類】與 【 接口 Interfaces】的聯(lián)合搭配使用解讀

    導讀 : 前面章節(jié),我們講到過 接口(Interface)可以用于對「對象的形狀(Shape)」進行描述。 本章節(jié)主要介紹接口的另一個用途,對類的一 部分行為進行抽象。 類配合實現(xiàn)接口 實現(xiàn)( implements )是面向對象中的一個重要概念。 一般來講,一個類只能繼承自另一個類 ,但

    2024年02月14日
    瀏覽(19)
  • Typescript - 通俗易懂的 interface 接口,創(chuàng)建接口 / 基礎使用 / 可選屬性 / 只讀屬性 / 任意屬性(詳細教程)

    在面向對象語言中,接口是一個很重要的概念,它是對行為的抽象,而具體如何行動需要由類去實現(xiàn)。 TypeScript 中的接口是一個非常靈活的概念,除了可用于 對類的一部分行為進行抽象 以外,也常用于對「對象的形狀(Shape)」進行描述。 ?TypeScript 的核心原則之一是對值所

    2023年04月15日
    瀏覽(27)
  • 深入理解 TypeScript 的 type 以及 type 與 interface 和 class 的區(qū)別

    TypeScript 是一種強類型的 JavaScript 超集,它為 JavaScript 提供了靜態(tài)類型系統(tǒng)。在 TypeScript 中,我們可以使用 type 、 interface 和 class 為數(shù)據(jù)定義類型。本文將重點介紹 type 的作用以及它與 interface 和 class 的區(qū)別。 type type 是 TypeScript 中用于定義類型別名、聯(lián)合類型、交叉類型等復

    2024年02月03日
    瀏覽(16)
  • go 結構體 - 值類型、引用類型 - 結構體轉json類型 - 指針類型的種類 - 結構體方法 - 繼承 - 多態(tài)(interface接口) - 練習

    go 結構體 - 值類型、引用類型 - 結構體轉json類型 - 指針類型的種類 - 結構體方法 - 繼承 - 多態(tài)(interface接口) - 練習

    目錄 一、結構體 1、python 與?go面向對象的實現(xiàn): 2、初用GO中的結構體:(實例化一個值類型的數(shù)據(jù)(結構體)) 輸出結果不同的三種方式? 3、實例化一個引用類型的數(shù)據(jù)(結構體) 4、引用類型(指針類型) vs 值類型(兩者的區(qū)別) 引用類型(指針類型) - 值類型內(nèi)存拓撲圖:

    2024年02月14日
    瀏覽(32)
  • 面試題-TS(三):TypeScript 中的接口是什么?它們有什么作用?

    面試題-TS(3):TypeScript 中的接口是什么?它們有什么作用? 在TypeScript中,接口是一種用于定義對象屬性和行為的工具。它們充當了代碼之間的契約,描述了對象應該具有的屬性和方法。通過使用接口,我們可以提供更好的類型檢查、模塊化和代碼復用。 一、接口的定義和使

    2024年02月15日
    瀏覽(32)
  • TypeScript必知三部曲(一)TypeScript編譯方案以及IDE對TS的類型檢查

    TypeScript必知三部曲(一)TypeScript編譯方案以及IDE對TS的類型檢查

    TypeScript代碼的編譯過程一直以來會給很多小伙伴造成困擾,typescript官方提供tsc對ts代碼進行編譯,babel也表示能夠編譯ts代碼,它們二者的區(qū)別是什么?我們應該選擇哪種方案?為什么IDE打開ts項目的時候,就能有這些ts代碼的類型定義?為什么明明IDE對代碼標紅報錯,但代碼

    2023年04月08日
    瀏覽(22)
  • Failed to load plugin ‘@typescript-eslint‘ declared in ‘.eslintrc.js‘: Cannot find module ‘typescrip

    Failed to load plugin ‘@typescript-eslint‘ declared in ‘.eslintrc.js‘: Cannot find module ‘typescrip

    今天遇到這個報錯搞了一下午,網(wǎng)上百度的很多方法都不適合?,F(xiàn)在問題解決了,就把解決方法記錄一下。 我是在編譯代碼(npm run dev)的時候拋出了異常信息,提示自己插件加載失敗,找不到對應的模塊,介紹下自己的環(huán)境,用 vscode+vue2 ,eslint版本 6.8.0 接下來列舉下自己

    2024年02月15日
    瀏覽(29)
  • Scala的特質trait與java的interface接口的區(qū)別,以及Scala特質的自身類型和依賴注入

    Scala的特質trait與java的interface接口的區(qū)別,以及Scala特質的自身類型和依賴注入

    Scala中的特質(trait)和Java中的接口(interface)在概念和使用上有一些區(qū)別: 默認實現(xiàn):在Java中,接口只能定義方法的簽名,而沒有默認實現(xiàn)。而在Scala的特質中,除了可以定義方法簽名外,還可以定義方法的具體實現(xiàn)。這樣,在混入(mix in)特質的類中,可以直接使用特質

    2024年02月10日
    瀏覽(18)
  • TypeScript的interface

    目錄 一、基本使用 二、interface重名、重合 三、任意key 四、interface的? 五、interface的readonly 六、interfacec的接口繼承 七、interface定義函數(shù) 總結: 變量a這個對象必須有name和age這兩個屬性,并且他們的類型分別是string和number, 這都相當與給變量a聲明了一個指定的類型A ?總結:

    2024年02月09日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包