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

深入理解 TypeScript 的 type 以及 type 與 interface 和 class 的區(qū)別

這篇具有很好參考價(jià)值的文章主要介紹了深入理解 TypeScript 的 type 以及 type 與 interface 和 class 的區(qū)別。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

TypeScript 是一種強(qiáng)類型的 JavaScript 超集,它為 JavaScript 提供了靜態(tài)類型系統(tǒng)。在 TypeScript 中,我們可以使用 type、interfaceclass 為數(shù)據(jù)定義類型。本文將重點(diǎn)介紹 type 的作用以及它與 interfaceclass 的區(qū)別。

  1. type

type 是 TypeScript 中用于定義類型別名、聯(lián)合類型、交叉類型等復(fù)雜類型的聲明方式。它在編譯后的 JavaScript 代碼中被移除,因?yàn)樗鼈儍H在編譯階段用于類型檢查。換句話說,type 不需要運(yùn)行時(shí)信息。

  • 類型別名(Type Aliases):類型別名是給一個(gè)類型起一個(gè)新名字。例如:

    type StringOrNumber = string | number;
    
  • 聯(lián)合類型(Union Types):聯(lián)合類型表示一個(gè)值可以是多個(gè)類型中的一種。例如:

    type StringOrNumber = string | number;
    
  • 交叉類型(Intersection Types):交叉類型表示一個(gè)值必須滿足多個(gè)類型的要求。例如:

    type Name = { name: string };
    type Age = { age: number };
    type Person = Name & Age;
    
  • 不需要運(yùn)行時(shí)信息:
    在 TypeScript 中,有些類型信息僅在編譯時(shí)起作用,而在運(yùn)行時(shí)則不存在。例如,type 和 interface 定義的類型信息在編譯后的 JavaScript 代碼中被移除,因?yàn)樗鼈儍H在編譯階段用于類型檢查。相比之下,class 定義的類型信息會(huì)保留在編譯后的代碼中,因?yàn)樗鼈儼瑢?shí)際的屬性和方法實(shí)現(xiàn),這些信息在運(yùn)行時(shí)是必需的。

  1. interface

interface 主要用于定義對(duì)象的類型和形狀。它支持繼承和實(shí)現(xiàn),因此非常適合創(chuàng)建復(fù)雜的對(duì)象類型。和 type 一樣,interface 定義的類型信息在編譯后的代碼中被移除。

interface 可以通過關(guān)鍵字 extends 實(shí)現(xiàn)接口繼承,通過關(guān)鍵字 implements 實(shí)現(xiàn)接口實(shí)現(xiàn)。這讓我們可以創(chuàng)建具有多層次的類型結(jié)構(gòu)。

例如:

interface Animal {
  name: string;
  speak(): void;
}

interface Dog extends Animal {
  breed: string;
}

class Labrador implements Dog {
  name: string;
  breed: string;

  constructor(name: string, breed: string) {
    this.name = name;
    this.breed = breed;
  }

  speak() {
    console.log(`${this.name} says woof!`);
  }
}
  1. class

class 是一種定義類型和實(shí)現(xiàn)的方式。它既包含類型信息,也包含實(shí)際的屬性和方法實(shí)現(xiàn)。與 typeinterface 不同,class 定義的類型信息會(huì)保留在編譯后的代碼中,因?yàn)樗鼈冊(cè)谶\(yùn)行時(shí)是必需的。

class 可以通過關(guān)鍵字 extends 實(shí)現(xiàn)類繼承,還可以通過關(guān)鍵字 implements 實(shí)現(xiàn)接口實(shí)現(xiàn)。這使得 class 成為創(chuàng)建具有多層次結(jié)構(gòu)和行為的對(duì)象的理想選擇。

class User {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  sayHello(): void {
    console.log(`Hello, my name is ${this.name}`);
  }
}

class Employee extends User {
  role: string;

  constructor(name: string, age: number, role: string) {
    super(name, age);
    this.role = role;
  }
}

總結(jié):

在 TypeScript 中,type、interfaceclass 分別具有自己的用途和特點(diǎn)。

  • type 適用于定義類型別名、聯(lián)合類型、交叉類型等,并且不需要運(yùn)行時(shí)信息。
  • interface 主要用于定義對(duì)象的類型和形狀,支持繼承和實(shí)現(xiàn)。
  • class 既包含類型信息,也包含實(shí)際的屬性和方法實(shí)現(xiàn)。在實(shí)際開發(fā)中,我們應(yīng)根據(jù)需求選擇合適的類型聲明方式。

雖然 typeinterface 在很多場(chǎng)景下可以互換使用,但它們?cè)谀承┨囟▓?chǎng)景下有著各自的優(yōu)勢(shì)。type 更適用于組合不同類型,如聯(lián)合類型、交叉類型等,而 interface 更適用于定義對(duì)象的形狀,特別是在面向?qū)ο缶幊讨小?code>class 則提供了完整的類型定義和實(shí)現(xiàn),可以在運(yùn)行時(shí)進(jìn)行實(shí)例化和操作。

在實(shí)踐中,我們應(yīng)該根據(jù)實(shí)際需求和場(chǎng)景選擇合適的類型聲明方式。例如,在定義一個(gè)復(fù)雜的對(duì)象類型時(shí),可以使用 interface;在組合不同類型時(shí),可以使用 type;在創(chuàng)建具有行為的對(duì)象時(shí),可以使用 class。文章來源地址http://www.zghlxwxcb.cn/news/detail-439024.html

到了這里,關(guān)于深入理解 TypeScript 的 type 以及 type 與 interface 和 class 的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【TypeScript】TS中type和interface在類型聲明時(shí)的區(qū)別

    【TypeScript】TS中type和interface在類型聲明時(shí)的區(qū)別

    ?? 個(gè)人主頁: 不叫貓先生 ???♂? 作者簡介:2022年度博客之星前端領(lǐng)域TOP 2,前端領(lǐng)域優(yōu)質(zhì)作者、阿里云專家博主,專注于前端各領(lǐng)域技術(shù),共同學(xué)習(xí)共同進(jìn)步,一起加油呀! ??優(yōu)質(zhì)專欄: vue3+vite+typeScript從入門到實(shí)踐 ?? 資料領(lǐng)取:前端進(jìn)階資料可以找我免費(fèi)領(lǐng)取 ??

    2023年04月26日
    瀏覽(25)
  • TypeScript 中【class類】與 【 接口 Interfaces】的聯(lián)合搭配使用解讀

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

    導(dǎo)讀 : 前面章節(jié),我們講到過 接口(Interface)可以用于對(duì)「對(duì)象的形狀(Shape)」進(jìn)行描述。 本章節(jié)主要介紹接口的另一個(gè)用途,對(duì)類的一 部分行為進(jìn)行抽象。 類配合實(shí)現(xiàn)接口 實(shí)現(xiàn)( implements )是面向?qū)ο笾械囊粋€(gè)重要概念。 一般來講,一個(gè)類只能繼承自另一個(gè)類 ,但

    2024年02月14日
    瀏覽(19)
  • 【TypeScript】接口類型 Interfaces 的使用理解

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

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

    2024年02月15日
    瀏覽(23)
  • abstract class和interface有什么區(qū)別?

    含有abstract修飾符的class即為抽象類,abstract 類不能創(chuàng)建的實(shí)例對(duì)象。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體(Concrete)子類中實(shí)現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法。如果的子類沒有實(shí)

    2024年02月05日
    瀏覽(17)
  • abstract class 和 interface 有什么區(qū)別

    目錄 abstract class 和 interface 有什么區(qū)別 1.抽象類 1.1抽象類的格式 1.2抽象類注意事項(xiàng) 2.接口 2.1接口的格式 2.2接口可以多繼承 2.3接口的實(shí)現(xiàn)(implements) 3.異同 抽象類:聲明方法的存在而不實(shí)現(xiàn)的類,如果一個(gè)類中沒有包含足夠的信息來描繪一個(gè)具體的對(duì)象,它只能被繼承,派生出

    2024年02月05日
    瀏覽(22)
  • 【TypeScript】中定義與使用 Class 類的解讀理解

    【TypeScript】中定義與使用 Class 類的解讀理解

    類是用于創(chuàng)建對(duì)象的模板。他們用代碼封裝數(shù)據(jù)以處理該數(shù)據(jù)。JavaScript 中的類建立在原型上,但也具有某些語法和語義未與 ES5 類相似語義共享。 TypeScript 除了實(shí)現(xiàn)了所有 ES6 中的類的功能以外,還添加了一些新的用法。 關(guān)于 ES6的 Class 類語法概念 ,在本章節(jié)不做過多闡述,

    2024年02月14日
    瀏覽(18)
  • TypeScript深度剖析:TypeScript 中命名空間與模塊的理解?區(qū)別?

    TypeScript深度剖析:TypeScript 中命名空間與模塊的理解?區(qū)別?

    TypeScript ?與 ECMAScript ?2015 一樣,任何包含頂級(jí)? import ?或者? export ?的文件都被當(dāng)成一個(gè)模塊 相反地,如果一個(gè)文件不帶有頂級(jí)的 import 或者 export 聲明,那么它的內(nèi)容被視為全局可見的 例如我們?cè)谠谝粋€(gè)? TypeScript ?工程下建立一個(gè)文件? 1.ts ,聲明一個(gè)變量 a ,如下: 然

    2024年02月07日
    瀏覽(27)
  • 《深入理解Java虛擬機(jī)》讀書筆記:Class類文件的結(jié)構(gòu)

    《深入理解Java虛擬機(jī)》讀書筆記:Class類文件的結(jié)構(gòu)

    Class類文件的結(jié)構(gòu) ? Sun公司以及其他虛擬機(jī)提供商發(fā)布了許多可以運(yùn)行在各種不同平臺(tái)上的虛擬機(jī),這些虛擬機(jī)都可以載入和執(zhí)行同一種平臺(tái)無關(guān)的的程序存儲(chǔ)格式——字節(jié)碼(ByteCode),從而實(shí)現(xiàn)了程序的“一次編寫,到處運(yùn)行”。 ? Java虛擬機(jī)提供的語言無關(guān)性 ? “Clas

    2024年02月13日
    瀏覽(18)
  • 深入理解ArkTS:Harmony OS 應(yīng)用開發(fā)語言 TypeScript 的基礎(chǔ)語法和關(guān)鍵特性

    Harmony OS應(yīng)用開發(fā)的主力語言ArkTS的前身TS語言的基本語法。通過學(xué)習(xí)變量的聲明和數(shù)據(jù)類型、條件控制、函數(shù)聲明、循環(huán)迭代等基本知識(shí),并了解內(nèi)核接口的聲明和使用。同時(shí)還介紹了模塊化開發(fā)的概念,提高代碼的復(fù)用性和開發(fā)效率。該對(duì)話還涉及了if else和switch條件控制語

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

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

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

    2024年02月10日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包