成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

TypeScript 中 Type 和 Interface 有什么區別?

開發 前端
今天我們來看看 Type 和 Interface 的區別。Type 是 類型別名,給一些類型的組合起別名,這樣能夠更方便地在各個地方使用。Interface 是 接口。有點像 type,可以用來代表一種類型組合,但它范圍更小一些,只能描述對象結構。

大家好,我是前端西瓜哥,今天我們來看看 type 和 interface 的區別。

type 和 interface

type 是 類型別名,給一些類型的組合起別名,這樣能夠更方便地在各個地方使用。

假設我們的業務中,id 可以為字符串或數字,那么我們可以定義這么一個名為 ID 的 type:

type ID = string | number;

定義一個名為 Circle 的對象結構 type:

type Circle = {
x: number;
y: number;
radius: number;
}

interface 是 接口。有點像 type,可以用來代表一種類型組合,但它范圍更小一些,只能描述對象結構。

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

它們寫法有一點區別,type 后面需要用 =,interface 后面不需要 =,直接就帶上 {

范圍

type 能表示的任何類型組合。

interface 只能表示對象結構的類型。

繼承

interface 可以繼承(extends)另一個 interface。

下面代碼中,Rect 繼承了 Shape 的屬性,并在該基礎上新增了 width 和 height 屬性。

interface Shape {
x: number;
y: number;
}
// 繼承擴展
interface Rect extends Shape {
width: number;
height: number;
}
const rect: Rect = { x: 0, y: 0, width: 0, height: 0 };

interface 也可以繼承自 type,但只能是對象結構,或多個對象組成交叉類型(&)的 type。

再來看看 type 的繼承能力。

type 可以通過 & 的寫法來繼承 type 或 interface,得到一個交叉類型:

type Shape = {
x: number;
y: number;
}
type Circle = Shape & { r: number }
const circle: Circle = { x: 0, y: 0, r: 8 }

聲明合并

interface 支持聲明合并,文件下多個同名的 interface,它們的屬性會進行合并。

interface Point {
x: number;
}
interface Point {
y: number;
}
const point: Point = { x: 10, y: 30 };

需要注意的是,同名屬性的不能進行類型覆蓋修改,否則編譯不通過。比如我先聲明屬性 x 類型為 number,然后你再聲明屬性 x 為 string | numebr,就像下面這樣,編譯器會報錯。

interface Point {
x: number;
}
interface Point {
// 報錯
// Property 'x' must be of type 'number', but here has type 'string | number'.
x: string | number;
y: number;
}

extends 可以將屬性的類型進行收窄,比如從 string | number 變成 string。

但聲明合并不行,類型必須完全一致。

type 不支持聲明合并,一個作用域內不允許有多個同名 type。

// 報錯:Duplicate identifier 'Point'.
type Point = {
x: number;
}
// 報錯:Duplicate identifier 'Point'.
type Point = {
y: number;
}

當然,如果有和 type 同名的 interface,也會報錯。

結尾

總結一下,type 和 interface 的不同點有:

  1. type 后面有 =,interface 沒有。
  2. type 可以描述任何類型組合,interface 只能描述對象結構。
  3. interface 可以繼承自(extends)interface 或對象結構的 type。type 也可以通過 &做對象結構的繼承。
  4. 多次聲明的同名 interface 會進行聲明合并,type 則不允許多次聲明。

大多數情況下,我更推薦使用 interface,因為它擴展起來會更方便,提示也更友好。& 真的很難用。

責任編輯:姜華 來源: 今日頭條
相關推薦

2022-03-13 18:53:31

interfacetypeTypeScript

2022-05-06 09:21:21

TypeScriptinterfacetype

2021-06-23 08:01:18

TypeScript interface type

2022-08-31 08:33:54

Bash操作系統Linux

2021-08-05 08:32:45

TypeScript InterfaceType

2019-04-03 14:16:25

Type 1Type 2虛擬機

2021-03-27 10:56:17

promisethenfinally

2024-05-27 00:40:00

2022-02-27 15:33:22

安全CASBSASE

2021-12-17 14:40:02

while(1)for(;;)語言

2021-05-16 14:26:08

RPAIPACIO

2024-03-05 18:59:59

前端開發localhost

2024-09-09 13:10:14

2022-08-02 08:23:37

SessionCookies

2020-03-09 20:56:19

LoRaLoRaWAN無線技術

2022-09-07 18:32:57

并發編程線程

2022-06-06 14:53:02

LoRaLoRaWAN

2022-09-08 18:38:26

LinuxWindowsmacOS

2020-11-09 14:07:53

PyQtQt編程

2025-04-27 08:15:00

FlinkSavepointCheckpoint
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 看av片网站 | 一区中文字幕 | 欧美自拍日韩 | 国产激情视频在线观看 | 国产精品久久久久久久久久三级 | 亚洲精品视频在线看 | 国产真实精品久久二三区 | 欧美日韩国产欧美 | 日韩欧美一区在线 | 99re视频 | 自拍偷拍av| 免费久久精品视频 | 午夜激情免费视频 | 久久99精品久久久水蜜桃 | 欧美日韩不卡合集视频 | 亚洲一区二区三区在线播放 | av日韩一区 | 亚洲精品v日韩精品 | 狠狠夜夜| 欧美一级黄色免费 | 午夜视频免费 | 国产在线观看一区二区 | 日韩网站在线观看 | 欧美一区二不卡视频 | h视频在线免费 | 国产精品亚洲二区 | 国产区精品在线观看 | 欧美成人免费在线视频 | 日韩欧美大片 | 色精品 | 中文字幕欧美日韩一区 | 精品av天堂毛片久久久借种 | 一区二区三区免费看 | 久久亚洲国产 | 99爱视频| 精品一区二区久久久久久久网站 | 国产综合视频 | 成人美女免费网站视频 | 亚洲午夜视频在线观看 | h视频在线观看免费 | 国产精品性做久久久久久 |