最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TypeScript中的數(shù)據(jù)類型enum?type?interface基礎(chǔ)用法示例

 更新時(shí)間:2023年08月11日 10:21:50   作者:艾艾  
這篇文章主要為大家介紹了TypeScript中的數(shù)據(jù)類型enum?type?interface基礎(chǔ)用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一. enum,何時(shí)去使用enum

enum用于映射,以下是基本用法

enum?A?{
??todo?=?0,?//?表示todo等于0,往下依次增加
??done,
??archived,
??deleted,
}
let?orderStatus?=?0;
orderStatus?=?A.todo;
orderStatus?=?A.done;
console.log(orderStatus);

通過(guò)位運(yùn)算和enums做權(quán)限控制

enum?Permission?{
??None?=?0,?//?0000
??Read?=?1?<<?0,?//?0001
??Write?=?1?<<?1,?//?0010
??Delete?=?1?<<?2,?//?0100
??Manage?=?Read?|?Write?|?Delete,?//?二進(jìn)制的或?//?0111
}
type?User?=?{
??permission:?Permission;
};
const?user:?User?=?{
??permission:?0b0111,
};?//?這個(gè)值應(yīng)該是從后臺(tái)獲取
//?用二進(jìn)制表示權(quán)限,若user.permission&Permission.Write?===?Permission.Write?則user.permission有Permission.Write的所有1
if?((user.permission?&?Permission.Write)?===?Permission.Write)?{
??console.log('擁有寫權(quán)限');
}

二. 什么時(shí)候用enum會(huì)顯得很呆

//?以下這種場(chǎng)景就很呆,不如用type+并集
enum?Fruit?{
??apple?=?'apple',
??banana?=?'banana',
??pineapple?=?'pineapple',
??watermelon?=?'watermelon',
}

let?f:?Fruit?=?Fruit.apple;
f?=?Fruit.watermelon;
console.log(f);

對(duì)比直接用type+并集的方式

//?用type加并集
type?Fruit?=?'apple'?|?'banana'?|?'watermelon'?|?'pineapple';
let?f:?Fruit?=?'banana';
f?=?'watermelon';
console.log(f);

總結(jié): number + enum 不錯(cuò),string 和 混用的情況都不太合適,如果沒(méi)有enum在js中我們可以用map來(lái)替代

三. type和interface的區(qū)別

什么時(shí)候用type?

幾乎沒(méi)有不能用type的場(chǎng)景,它的官方名稱應(yīng)該叫做類型別名(Type Aliases),也就是給其它類型取一個(gè)名字

type?Name?=?string;
const?a:?Name?=?'hi';
type?FalseLike?=?0?|?''?|?null?|?undefined?|?false;
//?比較特殊的帶有屬性的函數(shù)的聲明方式
type?FnWithProp?=?{
??(a:?number,?b:?number):?number;
??prop:?string;
};
const?f:?FnWithProp?=?(x,?y)?=>?{
??return?x?+?y;
};
f.prop?=?'hello';

為什么叫做類型別名

type?A?=?string;
type?B?=?A;?//?B?實(shí)際上的類型還是string,不是A,也就是說(shuō)type聲明的是一個(gè)類型的別名,沒(méi)有產(chǎn)生新的類型

什么時(shí)候用interface

接口interface是面向?qū)ο罄锩娴母拍?,它表示class需要有的一些功能,ts中的功能不僅能描述功能也能描述對(duì)象的屬性

type?A1?=?Array<string>?&?{
??name:?string;
}?&?X;
interface?X?{
??age:?number;
}
//?interface就是用面向?qū)ο蟮暮谠?,把type能做的事情再描述一遍
interface?A2?extends?Array<string>,?X?{
??name:?string;
}

interface描述函數(shù)

interface?Fn?{
??(a:?number,?b:?number):?number;
??xxx:?number;
}
const?f:?Fn?=?(x,?y)?=>?{
??return?x?+?y;
};
f.xxx?=?1;
console.log(f);

描述日期對(duì)象

interface?D?extends?Date?{
}

const?d:?D?=?new?Date();
console.log(d);

type和interface的范圍

type也能描述對(duì)象,是不是就不需要interface? 我感覺(jué)并非如此,主要有兩點(diǎn)。第一點(diǎn),其實(shí)interface這個(gè)特性的出現(xiàn)迎合了面向?qū)ο蟮姆劢z的需要,有助于typescript這門語(yǔ)言的推廣傳播。 第二點(diǎn)之后我會(huì)細(xì)說(shuō)。

區(qū)別

  • interface只描述對(duì)象,type則描述所有區(qū)別
  • type 只是別名interface則是類型聲明

四. type和interface的第三個(gè)區(qū)別

type的重要特性: type不可以重新賦值,這樣的好處計(jì)算非???,但是缺點(diǎn)就是type不好擴(kuò)展

type?A?=?number;

interface可以自動(dòng)合并,所以可以被擴(kuò)展

interface?X?{
??name:?string;
}
interface?X?{
??age:?number;
}
const?a:?X?=?{
??name:?'frank',
??age:?18,
};

interface擴(kuò)展的例子

//?擴(kuò)展axios
import?{AxiosRequestConfig}?from?'axios'
declare?module?'axios'?{
??export?interface?AxiosRequestConfig?{
????_autoLoading?:?boolean;
????_mock?:?string;
??}
}
//?擴(kuò)展string
interface?String?{
??padZero(length:?number):?string;
}
const?s?=?'hello';
s.padZero(1);

總結(jié)

對(duì)外API盡量使用interface,方便擴(kuò)展,對(duì)內(nèi)API盡量用type,防止代碼分散

以上就是TypeScript中的數(shù)據(jù)類型enum type interface基礎(chǔ)用法示例的詳細(xì)內(nèi)容,更多關(guān)于TypeScript數(shù)據(jù)類型enum type interface的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • TypeScript使用strictnullcheck實(shí)戰(zhàn)解析

    TypeScript使用strictnullcheck實(shí)戰(zhàn)解析

    這篇文章主要為大家介紹了TypeScript使用strictnullcheck實(shí)戰(zhàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • js 獲取今天以及過(guò)去日期

    js 獲取今天以及過(guò)去日期

    這篇文章主要介紹了js獲得當(dāng)前系統(tǒng)日期時(shí)間以及過(guò)去系統(tǒng)日期時(shí)間的方法,涉及javascript操作日期時(shí)間的相關(guān)技巧,示例代碼如下,需要的朋友可以參考下
    2017-04-04
  • TypeScript Nim交替使用細(xì)節(jié)分析

    TypeScript Nim交替使用細(xì)節(jié)分析

    這篇文章主要為大家介紹了TypeScript Nim交替使用細(xì)節(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • TypeScript數(shù)據(jù)結(jié)構(gòu)鏈表結(jié)構(gòu)?LinkedList教程及面試

    TypeScript數(shù)據(jù)結(jié)構(gòu)鏈表結(jié)構(gòu)?LinkedList教程及面試

    這篇文章主要為大家介紹了TypeScript數(shù)據(jù)結(jié)構(gòu)鏈表結(jié)構(gòu)?LinkedList教程及面試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • TypeScript之Generics泛型類型學(xué)習(xí)

    TypeScript之Generics泛型類型學(xué)習(xí)

    這篇文章主要為大家介紹了TypeScript之Generics泛型類型學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Nest框架中集成使用Swagger示例說(shuō)明

    Nest框架中集成使用Swagger示例說(shuō)明

    這篇文章主要為大家介紹了Nest框架中集成使用Swagger的示例說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 適合面向ChatGPT編程的架構(gòu)示例詳解

    適合面向ChatGPT編程的架構(gòu)示例詳解

    這篇文章主要為大家介紹了適合面向ChatGPT編程的架構(gòu)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 微信小程序?qū)崿F(xiàn)圖片預(yù)加載組件

    微信小程序?qū)崿F(xiàn)圖片預(yù)加載組件

    預(yù)加載圖片是提高用戶體驗(yàn)的一個(gè)很好方法。圖片預(yù)先加載到瀏覽器中,訪問(wèn)者便可順利地在你的網(wǎng)站上沖浪,并享受到極快的加載速度。下面這篇文章主要介紹了微信小程序?qū)崿F(xiàn)圖片預(yù)加載組件的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • typescript快速上手的基礎(chǔ)知識(shí)篇

    typescript快速上手的基礎(chǔ)知識(shí)篇

    靜態(tài)類型的typescript與傳統(tǒng)動(dòng)態(tài)弱類型語(yǔ)言javascript不同,在執(zhí)行前會(huì)先編譯成javascript,因?yàn)樗鼜?qiáng)大的type類型系統(tǒng)加持,能讓我們?cè)诰帉懘a時(shí)增加更多嚴(yán)謹(jǐn)?shù)南拗?。注意,它并不是一門全新的語(yǔ)言,所以并沒(méi)有增加額外的學(xué)習(xí)成本
    2022-12-12
  • type challenge刷題之(middle 部分)示例解析

    type challenge刷題之(middle 部分)示例解析

    這篇文章主要為大家介紹了type challenge刷題之(middle 部分)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評(píng)論

宜兰县| 宜君县| 和硕县| 富蕴县| 大荔县| 乌鲁木齐市| 宁强县| 临夏市| 昌邑市| 育儿| 安新县| 丁青县| 高密市| 若羌县| 南通市| 临安市| 天气| 乌拉特前旗| 孝昌县| 乐安县| 台中市| 岳阳市| 泾源县| 金溪县| 枣庄市| 绿春县| 通道| 防城港市| 芜湖县| 青海省| 新安县| 那坡县| 维西| 新营市| 奈曼旗| 昔阳县| 嘉荫县| 邓州市| 宿松县| 杭锦后旗| 临澧县|