日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

TypeScript接口和類型的區(qū)別小結(jié)

瀏覽:17日期:2022-06-09 13:51:18
目錄
  • 接口(interface)
  • 類型(type)
  • interface vs type
  • 結(jié)論

TypeScript 是由 Microsoft 開發(fā)的一種開源的編程語言。它是 JavaScript 的超集,添加了靜態(tài)類型和其他功能,使代碼更為健壯且易于維護(hù)。在 TypeScript 中,有兩種主要的定義自定義類型的方式:接口和類型。盡管它們在外觀上可能相似,但它們之間有一些關(guān)鍵的區(qū)別。在本文中,我們將討論 TypeScript 中接口和類型之間的區(qū)別并給出具體代碼示例。

接口(interface)

interface 是一種定義復(fù)雜類型的方式,它可以用來描述對象類型、函數(shù)類型、類類型、數(shù)組類型、字面量類型等。interface 通常用來描述一個對象的外部形狀(Shape),即這個對象有哪些屬性、屬性的類型是什么、方法的簽名是什么等。例如:

interface Person {
? name: string;
? age: number;
? sayHello(): void;
}
class Student implements Person {
? name: string;
? age: number;
? constructor(name: string, age: number) {
? ? this.name = name;
? ? this.age = age;
? }
? sayHello() {
? ? console.log(`Hi, my name is ${this.name}, and I"m ${this.age} years old.`);
? }
}
const student = new Student("Tom", 20);
student.sayHello(); // Hi, my name is Tom, and I"m 20 years old.

上面的代碼中,我們定義了一個 Person 接口,它包含 name 和 age 屬性以及 sayHello 方法。然后我們定義了一個 Student 類,它實現(xiàn)了 Person 接口,因此必須實現(xiàn) name、age 和 sayHello。在 sayHello 方法中,我們使用模板字符串輸出學(xué)生的姓名和年齡。

類型(type)

type 是一種定義簡單類型的方式,它可以用來定義基本類型、聯(lián)合類型、交叉類型、字面量類型等。type 可以給一個類型起一個別名,以便重復(fù)使用。例如:

type Status = "active" | "inactive";
type Person = {
? name: string;
? age: number;
? status: Status;
};

上面的代碼定義了一個 Status 類型和一個 Person 類型。Status 類型是一個字符串字面量類型,它只能是 'active' 或 'inactive' 中的一個。Person 類型描述了一個人對象的形狀,包括 name 屬性、age 屬性和 status 屬性,其中 status 屬性的類型是 Status。

雖然 interface 和 type 在定義類型時有些不同,但在使用時它們是具有一定通用性的。例如,我們可以使用 interface 定義函數(shù)的參數(shù)類型和返回值類型,也可以使用 type 定義同樣的類型,例如:

interface Sum {
? (a: number, b: number): number;
}
type Multiply = (a: number, b: number) => number;

上面的代碼分別使用 interface 和 type 定義了一個加法函數(shù)類型 Sum 和一個乘法函數(shù)類型 Multiply,它們都接受兩個參數(shù)并返回它們的運(yùn)算結(jié)果。

interface vs type

接口可以被繼承,而類型不能。

接口可以通過 extends 關(guān)鍵字來擴(kuò)展基礎(chǔ)接口,例如:

interface Person {
? name: string;
? age: number;
}
interface Employee extends Person {
? company: string;
}
const employee: Employee = { name: "John", age: 30, company: "Acme Inc." };

類型不能被繼承。

類型只能定義一次,而接口可以定義多次并且會自動合并。

類型可以定義一次,例如:

type Status = "active" | "inactive";
const status: Status = "active";

如果試圖再次定義同名類型,則會報錯。
接口可以定義多次,并且會自動合并同名屬性,例如:

interface Person {
? name: string;
}
interface Person {
? age: number;
}
const person: Person = { name: "John", age: 30 };

接口可以定義可選屬性和只讀屬性,而類型不能。

接口可以定義可選屬性和只讀屬性,例如:

interface Person {
? name: string;
? age?: number;
? readonly email: string;
}
const person1: Person = { name: "John", email: "john@example.com" };
const person2: Person = { name: "Jane", age: 25, email: "jane@example.com" };
person1.email = "jane@example.com"; // Error: Cannot assign to "email" because it is a read-only property.

類型不能定義可選屬性和只讀屬性。

類型可以定義聯(lián)合類型和交叉類型,而接口不能。

類型可以用聯(lián)合類型和交叉類型來組合多個類型,例如:

type Person = { name: string } & { age: number };
type Status = "active" | "inactive";
type UserStatus = { status: Status } & Person;
const userStatus: UserStatus = { name: "John", age: 30, status: "active" };

接口可以定義索引簽名,而類型不能。

接口可以定義索引簽名,例如:

interface Dictionary {
? [key: string]: number;
}
const dict: Dictionary = { a: 1, b: 2 };

類型不能定義索引簽名。

結(jié)論

  • 在對象擴(kuò)展情況下,interface 使用 extends 關(guān)鍵字,而 type 使用交叉類型(&)。
  • 同名的 interface 會自動合并,并且在合并時會要求兼容原接口的結(jié)構(gòu)。
  • interface 與 type 都可以描述對象類型、函數(shù)類型、Class 類型,但 interface 無法像 type 那樣表達(dá)元組、一組聯(lián)合類型等等。
  • interface 無法使用映射類型等類型工具,也就意味著在類型編程場景中我們還是應(yīng)該使用 type 。

interface 就是描述對象對外暴露的接口,其不應(yīng)該具有過于復(fù)雜的類型邏輯,最多局限于泛型約束與索引類型這個層面。而 type alias 就是用于將一組類型的重命名,或是對類型進(jìn)行復(fù)雜編程。

到此這篇關(guān)于TypeScript接口和類型的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)TypeScript接口和類型區(qū)別內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线一区视频| 久久国产乱子精品免费女| 欧美亚洲三级| 国产精品1luya在线播放| 国产精品流白浆在线观看| 久久精品九色| 激情视频一区二区三区| 爽好久久久欧美精品| 18国产精品| 91麻豆国产自产在线观看亚洲| 欧美中文高清| 久久av综合| 91精品国产自产在线观看永久∴ | 国产一卡不卡| 成人福利av| 免费成人在线观看| 欧美国产亚洲精品| 欧美.日韩.国产.一区.二区 | 日韩1区在线| 麻豆视频在线看| 精品视频国内| 999国产精品| 亚洲在线网站| 日本午夜精品视频在线观看| 免费在线日韩av| 精品资源在线| 午夜免费一区| 麻豆9191精品国产| 久久av电影| 色88888久久久久久影院| 尤物精品在线| 久久久免费人体| 中文日韩欧美| 久久精品亚洲一区二区| 黄色亚洲精品| 日韩av中文字幕一区二区| 日韩在线看片| 日韩综合一区二区| 国产精品国产三级国产在线观看| 日韩亚洲在线| 久久三级毛片| 亚洲久久一区| 欧美日韩一二| 久久久久伊人| 亚洲毛片视频| 免费观看久久av| 精品久久影院| 亚洲精品无播放器在线播放| 亚洲一级少妇| 免费视频一区二区三区在线观看| 日韩欧美一区免费| 国产亚洲字幕| 激情五月色综合国产精品| 麻豆成人91精品二区三区| 视频一区视频二区在线观看| 国产中文在线播放| 亚洲aa在线| 在线亚洲自拍| 久久国产日韩| 国产一区二区精品久| 日韩国产在线一| 日韩亚洲国产欧美| 久久久水蜜桃av免费网站| 久久精品午夜| 国产精品网在线观看| 欧美日韩国产亚洲一区| 麻豆视频在线观看免费网站黄| 国产亚洲人成a在线v网站| 影音先锋久久精品| 亚洲激情黄色| 亚洲午夜精品久久久久久app| 精品三区视频| 另类综合日韩欧美亚洲| 国产精品一线| 国产精品亚洲欧美| 国产欧美日韩一区二区三区四区| 亚洲精品日本| 日韩精彩视频在线观看| 蜜臀精品一区二区三区在线观看 | 亚洲天堂1区| 国产福利片在线观看| 久久中文欧美| 精品久久一区| 精品一区二区三区四区五区| 久久精品xxxxx| 国产日韩亚洲欧美精品| 久久狠狠久久| 国产精品亚洲成在人线| 欧美久久香蕉| 国产欧美日韩亚洲一区二区三区| 久久蜜桃资源一区二区老牛| 国产精品视频3p| 久久av电影| 久久中文字幕一区二区| 精品国产精品久久一区免费式 | 在线观看亚洲精品福利片| 视频一区视频二区中文| 亚洲一级特黄| 亚洲欧美激情诱惑| 四虎精品一区二区免费| 91精品尤物| 欧美成人一二区| 国产麻豆一区二区三区| 国产精品亚洲人成在99www| 麻豆精品av| 日韩成人亚洲| 亚洲美洲欧洲综合国产一区| 夜夜嗨av一区二区三区网站四季av| 在线国产一区二区| 蜜臀久久99精品久久久久久9 | 精品91久久久久| 国产农村妇女精品一二区| 久久xxxx| 欧美日韩精品一区二区三区在线观看| 国产福利一区二区三区在线播放| 日本久久一区| 精品视频自拍| 久久在线免费| 亚洲精品乱码日韩| 精品亚洲成人| 亚洲午夜av| 午夜久久av| 国产一区二区三区不卡av| 91精品精品| 蜜桃视频免费观看一区| 欧美精品aa| 亚洲特色特黄| 日韩高清欧美激情| 国产精品蜜芽在线观看| 日韩一级网站| 日本午夜精品| 在线一区视频观看| 亚洲v天堂v手机在线| 久久精品国产999大香线蕉| 色婷婷久久久| 午夜亚洲福利| 亚洲不卡系列| 日韩动漫一区| 欧美香蕉视频| 日韩久久99| 欧美日韩一区二区综合| 奇米狠狠一区二区三区| 精品国产aⅴ| 午夜日韩福利| 欧美1区二区| 亚洲天堂久久| 日本一区中文字幕| 精品久久福利| 日韩欧美中文字幕一区二区三区 | 福利一区视频| 亚洲tv在线| 欧美日韩一二| 麻豆久久一区| 亚洲视频二区| 久久精品高清| 精品久久美女| 日韩高清在线不卡| 亚洲国内欧美| 国产一区二区三区日韩精品| 欧洲av不卡| 国产精品地址| 老牛国产精品一区的观看方式| 91亚洲国产| 国产欧美日韩精品一区二区三区| 免费久久99精品国产自在现线| 久久电影tv| 国产精品白丝av嫩草影院| 在线国产日韩| 黑丝一区二区三区| 久久视频一区| 国产盗摄——sm在线视频| 久久国产免费看| 人人精品人人爱| 国产一区观看| 免费日韩一区二区三区| 亚洲欧美专区| 亚洲激情黄色| 久久国产毛片| 国产一区二区三区网| 久久精品99久久久| 日韩一区中文| 蜜桃久久精品一区二区| 日韩中文在线播放| 国产精品中文字幕亚洲欧美| 亚洲精品免费观看| 日韩在线观看一区二区| 欧美日韩国产免费观看视频| 日韩精品不卡一区二区| 精品国产亚洲一区二区三区在线 | 国产拍在线视频| 国产精品久久久久毛片大屁完整版| 国产精品婷婷| 伊人成人网在线看| 99精品视频在线观看免费播放| 麻豆国产91在线播放| 日韩中文一区二区| 免费日韩视频| 天堂中文av在线资源库| 日韩欧美在线中字| 国产一区二区色噜噜|