真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

TypeScript中interface和type間的區(qū)別是什么

這篇文章主要介紹“TypeScript中interface和type間的區(qū)別是什么”,在日常操作中,相信很多人在TypeScript中interface和type間的區(qū)別是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”TypeScript中interface和type間的區(qū)別是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司2013年至今,先為賓陽等服務(wù)建站,賓陽等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為賓陽企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

interface和type的區(qū)別是什么?本篇文章就來對比一下TypeScript中interface和type,帶大家了解一下interface和type間的差異,介紹一下在實際使用中選哪個!

當(dāng)我們使用 TypeScript 時,就會用到 interfacetype,平時感覺他們用法好像是一樣的,沒啥區(qū)別,都能很好的使用,所以也很少去真正的理解它們之間到底有啥區(qū)別。我們開發(fā)過經(jīng)?;蜻@么來定義類型:

interface Point {
    x: number;
    y: number;
}

或者這樣定義:

type Point = {
    x: number;
    y: number;
};

interfacetype之間的差異不僅僅是次要語法聲明。那么,今天我們就來看看這兩家伙之間存在啥不可告人的秘密。

類型和類型別名

TypeScript 有 boolean、number、string 等基本類型。如果我們想聲明高級類型,我們就需要使用類型別名。

類型別名指的是為類型創(chuàng)建新名稱。需要注意的是,我們并沒有定義一個新類型。使用type關(guān)鍵字可能會讓我們覺得是創(chuàng)建一個新類型,但我們只是給一個類型一個新名稱。

所以我們所以 type 時,不是在創(chuàng)建新的類別,而是定義類型的一個別名而已。

接口

type相反,接口僅限于對象類型。它們是描述對象及其屬性的一種方式。類型別名聲明可用于任何基元類型、聯(lián)合或交集。在這方面,接口被限制為對象類型。

interface 和 type 的相似之處

在討論它們的區(qū)別之前,我們先來看看它們的相似之處。

兩者都可以被繼承

interface 和  type 都可以繼承。另一個值得注意的是,接口和類型別名并不互斥。類型別名可以繼承接口,反之亦然。

對于一個接口,繼承另一個接口

interface PartialPointX { x: number; }
interface Point extends PartialPointX { y: number; }

或者,繼承一個類型

type PartialPointX = { x: number; };
interface Point extends PartialPointX { y: number; }

類型繼承另一個類型:

type PartialPointX = { x: number; };
type Point = PartialPointX & { y: number; };

或者,繼承一個接口:

interface PartialPointX { x: number; }
type Point = PartialPointX & { y: number; };
實現(xiàn)

類可以實現(xiàn)接口以及類型(TS 2.7+)。但是,類不能實現(xiàn)聯(lián)合類型。

interface Point {
 x: number;
 y: number;
}

class SomePoint implements Point {
 x = 1;
 y = 2;
}

type AnotherPoint = {
 x: number;
 y: number;
};

class SomePoint2 implements AnotherPoint {
 x = 1;
 y = 2;
}

type PartialPoint = { x: number; } | { y: number; };

// Following will throw an error
class SomePartialPoint implements PartialPoint {
 x = 1;
 y = 2;
}

interface 和 type 的區(qū)別

并集和交集類型

雖然接口可以被擴展和合并,但它們不能以聯(lián)合和交集的形式組合在一起。類型可以使用聯(lián)合和交集操作符來形成新的類型。

// object
type PartialPointX = { x: number; };
type PartialPointY = { y: number; };

// 并集
type PartialPoint = PartialPointX | PartialPointY;

// 交集
type PartialPoint = PartialPointX & PartialPointY;
聲明合并

TypeScript編譯器合并兩個或多個具有相同名稱的接口。 這不適用于類型。 如果我們嘗試創(chuàng)建具有相同名稱但不同的屬性的兩種類型,則TypeScript編譯器將拋出錯誤。

// These two declarations become:
// interface Point { x: number; y: number; }
interface Point { x: number; }
interface Point { y: number; }

const point: Point = { x: 1, y: 2 };
元組類型

元組(鍵值對)只能通過type關(guān)鍵字進行定義。

type Point = [x: number, y: number];

沒有辦法使用接口聲明元組。不過,我們可以在接口內(nèi)部使用元組

interface Point {
  coordinates: [number, number]
}

我們應(yīng)該使用哪一個?

一般來說,接口和類型都非常相似。

對于庫或第三方類型定義中的公共API定義,應(yīng)使用接口來提供聲明合并功能。除此之外,我們喜歡用哪個就用哪個,但是在整個代碼庫中應(yīng)該要保持一致性。

到此,關(guān)于“TypeScript中interface和type間的區(qū)別是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
名稱欄目:TypeScript中interface和type間的區(qū)別是什么
地址分享:http://weahome.cn/article/igsjhi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部