網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
?想繼續(xù)深入Ts其他知識(shí)點(diǎn)的同學(xué)可以關(guān)注下往期文章~
?? 一文帶你了解Ts泛型的應(yīng)用
?? 一文講解Typescript中工具類(lèi)型
?在我們Ts使用的日常開(kāi)發(fā)中,我們對(duì)于type(類(lèi)型別名)與interface(接口)的使用可能傻傻分不清楚,因?yàn)樗麄兊墓δ苓€是非常相似的,可以說(shuō)在大多數(shù)情況下type與interface還是等價(jià)的,我們可以使用兩種中的任意一種來(lái)對(duì)我們的項(xiàng)目進(jìn)行類(lèi)型定義,那么存在即合理,接下來(lái)我們將對(duì)type與interface有什么區(qū)別來(lái)進(jìn)行講解~
type與interface的相同點(diǎn)
定義對(duì)象或者函數(shù)的形狀
?首先兩者都可以對(duì)基本數(shù)據(jù)類(lèi)型與函數(shù)進(jìn)行類(lèi)型定義,比如:
interface Test {
a: string;
b: number;
c: boolean;
d?: number; // 可選屬性
readonly e: string; //只讀屬性
[f: string]: any //任意屬性
}
interface TestFunc {
(name:string,age:number): void
}
type Test = {
a: string;
b: number;
c: boolean;
d?: number; // 可選屬性
readonly e: string; //只讀屬性
[f: string]: any //任意屬性
}
type TestFunc = (name:string,age:number) => void
支持?jǐn)U展/繼承
?首先對(duì)于type與interface都是支持繼承的,但是兩者進(jìn)行繼承的方式不同,interface是通過(guò)extends來(lái)進(jìn)行繼承,而type是通過(guò)&來(lái)實(shí)現(xiàn),并且兩者可以進(jìn)行相互拓展,也就是interface可以拓展為type,type也可以拓展為interface。示例:
// interface進(jìn)行拓展
interface A {
a: string;
}
interface B extends A {
b: string;
}
let testObj: B = {
a: 's',
b: 's'
}
// type進(jìn)行拓展
type A = {
a: string;
}
type Test2 = A & {
b: string;
}
let testObj: B = {
a: 'test',
b: 'test'
}
// interface拓展為type
type A = {
a: string
}
interface B extends A {
b: string;
}
let testObj: B = {
a: 'test',
b: 'test'
}
// type拓展為interface
interface A {
a: string;
}
type B = A & {
b: string;
}
let testObj: B = {
a: 'test',
b: 'test'
}
type與interface的不同點(diǎn)
type的不同點(diǎn)
- type可以定義基本類(lèi)型的別名,如 type anotherNumber = number,此時(shí)anotherNumber可以代表number類(lèi)型,也作為其number類(lèi)型的別名
type C = number;
let numberC: C = 2;
- type可以通過(guò)typeof操作符來(lái)進(jìn)行定義,比如:type A = typeof B
let num: number = 1;
type C = typeof num;
- type可以聲明聯(lián)合類(lèi)型,如 type unionA = B1 | B2
type C = string | number | null;
let a: C = '1';
let b: C = 1;
let c: C = null;
- type可以聲明元組類(lèi)型,如 type tupleA = [B1, B2]
type C = [string, number];
const cArr: C = ['1', 1];
interface的不同點(diǎn)
- interface可以被多次定義,并且被多次定義的interface會(huì)進(jìn)行類(lèi)型合并,而type不可以
// interface進(jìn)行重復(fù)聲明
interface A {
a: number;
}
interface A {
b: string;
}
// 此時(shí)類(lèi)型為{a:number,b:string}
let testA: A = {
a: 1,
b: '1'
}
// 使用type進(jìn)行重復(fù)聲明類(lèi)型
type B = {
a: number;
}
// error報(bào)錯(cuò),標(biāo)識(shí)符重復(fù)(重復(fù)定義了B類(lèi)型)
type B = {
b: string;
}
原文鏈接:https://blog.csdn.net/liu19721018/article/details/124533573
相關(guān)推薦
- 2022-06-20 .NET?Core企業(yè)微信網(wǎng)頁(yè)授權(quán)登錄的實(shí)現(xiàn)_實(shí)用技巧
- 2022-08-14 Qt控件點(diǎn)擊消息獲取的方法詳解_C 語(yǔ)言
- 2023-07-04 注冊(cè)npm上傳包報(bào)This operation requires a one-time passwo
- 2023-03-16 Python庫(kù)functools示例詳解_python
- 2021-11-02 利用shadowsocks搭建局域網(wǎng)透明網(wǎng)關(guān)_Linux
- 2022-04-08 python?selenium保存圖片最好的兩種方法_python
- 2022-06-25 EF?Core的CRUD(增刪改查)基本操作_實(shí)用技巧
- 2024-07-18 Spring Security概述快速入門(mén)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支