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

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

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

一. enum,何時去使用enum

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

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

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

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

二. 什么時候用enum會顯得很呆

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

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

對比直接用type+并集的方式

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

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

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

什么時候用type?

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

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?實際上的類型還是string,不是A,也就是說type聲明的是一個類型的別名,沒有產(chǎn)生新的類型

什么時候用interface

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

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);

描述日期對象

interface?D?extends?Date?{
}

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

type和interface的范圍

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

區(qū)別

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

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

type的重要特性: type不可以重新賦值,這樣的好處計算非???,但是缺點就是type不好擴展

type?A?=?number;

interface可以自動合并,所以可以被擴展

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

interface擴展的例子

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

總結(jié)

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

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

相關(guān)文章

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

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

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

    js 獲取今天以及過去日期

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

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

    這篇文章主要為大家介紹了TypeScript Nim交替使用細節(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    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教程及面試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • TypeScript之Generics泛型類型學(xué)習(xí)

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

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

    Nest框架中集成使用Swagger示例說明

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

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

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

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

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

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

    靜態(tài)類型的typescript與傳統(tǒng)動態(tài)弱類型語言javascript不同,在執(zhí)行前會先編譯成javascript,因為它強大的type類型系統(tǒng)加持,能讓我們在編寫代碼時增加更多嚴謹?shù)南拗?。注意,它并不是一門全新的語言,所以并沒有增加額外的學(xué)習(xí)成本
    2022-12-12
  • type challenge刷題之(middle 部分)示例解析

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

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

最新評論

大厂| 衡南县| 资兴市| 文成县| 丘北县| 本溪市| 常山县| 宜昌市| 南乐县| 临颍县| 博爱县| 宁国市| 海阳市| 当阳市| 宁德市| 呼和浩特市| 广西| 雅江县| 昌都县| 绵阳市| 巫山县| 泸西县| 广丰县| 凌海市| 个旧市| 柘荣县| 疏勒县| 郓城县| 侯马市| 两当县| 伊春市| 镇康县| 余姚市| 德令哈市| 永昌县| 嘉禾县| 怀仁县| 英山县| 康马县| 鱼台县| 酒泉市|