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

TypeScript類型使用示例剖析

 更新時間:2023年05月05日 09:26:12   作者:渣渣錢端攻城獅  
這篇文章主要為大家介紹了TypeScript類型使用示例剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

JavaScript的內(nèi)置類型 VS TypeScript內(nèi)置類型

JSTS備注類型
numbernumber基礎(chǔ)類型
stringstring基礎(chǔ)類型
booleanboolean基礎(chǔ)類型
undefinedundefined基礎(chǔ)類型
nullnull基礎(chǔ)類型
symbolsymbolES6新增基礎(chǔ)類型
bigintbigintES11新增基礎(chǔ)類型
Objectobject 或 字面量描述-對象類型
ArrayArray<T> 或 元祖描述ES6新增對象類型
PromisePromise<T>ES6新增對象類型
DateDate-對象類型
RegExpRegExp-對象類型
Map、SetMap<Key, Value>ES6新增對象類型
.....對象類型

除此之外,TypeScript又單獨提出了三種類型,分別是元祖(Tuple)、接口(Interface)、枚舉(Enum)

元祖

元素個數(shù)和類型固定的數(shù)組

type Tuple = [number, string];

接口interface

可以描述函數(shù)、對象、構(gòu)造器的結(jié)構(gòu)

描述對象

interface Person {
    name: string;
    age: number;
}
const personObj: Person = {
    name: 'zhangsan',
    age: 18
}
// 如果對象的屬性不是固定的,可以考慮使用索引簽名進行類型聲明
interface Person {
    name: string;
    age: number;
    [prop: string]: string | number;
}

描述函數(shù)

interface GetDataInterface {
    (name: string):string;
}
const getData: GetDataInterface = (name) => {
    return `${name}你好`
}

描述構(gòu)造器

interface Person {
    name: string;
    age: number;
}
interface PersonConstructor{
    new (name: string, age: number): Person;
}
function createPerson(ctor: PersonConstructor): Person{
    return new ctor('zhangsan', 18);
}
// 使用createPerson案例
class Employee {
    public name: string;
    public age: number;
    constructor(name: string, age: number) {
      this.name = name;
      this.age = age;
    }
}
createPerson(Employee);

interface和type有什么區(qū)別?

枚舉

數(shù)字枚舉

enum DataEnum {
    A,
    B,
    C
}
console.log(DataEnum[0]);//反向映射 輸出 A  
console.log(DataEnum[1]); //反向映射 輸出 B
console.log(DataEnum['A']); //正向映射 輸出 0 

編譯后的代碼

字符串枚舉

enum DataEnum {
    ThisA = 'A',
    ThisB = 'B',
    ThisC = 'C'
}
console.log(DataEnum['ThisA']); // 輸出 A

編譯后的代碼

常量枚舉

  • 編譯階段生成的對象會被刪除
  • 常量枚舉成員在使用的地方被內(nèi)聯(lián)進來
  • 不存在映射關(guān)系,而且只能正向訪問,不能 Directions[0] 這種使用
const enum Directions {
  Up,
  Down,
  Left,
  Right
}
console.log(Directions.Up);

編譯后的代碼

上圖編譯后的代碼是符合ts常量枚舉的概念的,但是你會發(fā)現(xiàn),當常量枚舉和react、vue結(jié)合使用的時候,編譯后的代碼并不會刪除映射對象,編譯后常量枚舉和普通枚舉沒有區(qū)別,這又是為什么吶?

目前TypeScript受限于babel限制無法支持常量枚舉const enum,Babel是一個語法轉(zhuǎn)換器,是逐個腳步一個個編譯的,無法處理跨文件的源碼更新。例如type.ts文件內(nèi)導出一個常量枚舉,這個常量枚舉被多個文件使用,Babel是單個文件編譯,并不會根據(jù)多個入口對type.ts進行重復編譯,所以導致babel編譯TS時不支持const enum,會將其當初普通enum處理。

怎么讓Babel支持const enum?

Babel V7.15.0+版本,使用 @babel/plugin-transform-typescript插件,配置### optimizeConstEnums為true,可以讓Babel編譯TS時,如果常量枚舉是文件內(nèi)聯(lián),沒有export導出,會當成常量枚舉進行編譯。如果進行了export導出,同樣還是會當初普通枚舉編譯,這是因為Babel的逐個編譯單個文件特性導致

字面量類型

字面量類型也就是例如 111、'aaaa'、{a: 1}這種值也可以作為類型。其主要分為兩類:

  • 第一類是普通的字面量類型,就是111、'aaa'、{a: 1}這種。
  • 第二類是模板字面量類型,比如test${string}表示以test開頭的字符串
functon getData(name: `test${string}`){
}

特殊類型

  • never 代表不可達,比如函數(shù)拋出異常的時候,就是返回never
  • void 代表空,可以是undefined或never
  • any 任意類型,任意類型可以復制給它,它也可以賦值給任意類型(never除外)
  • unknown 是未知類型,任何類型都可以賦值給它,但是它不可以賦值給別的類型

類型的裝飾

?: 可有可無

readonly: 只讀屬性,不允許修改

interface Person{
    readonly name: string;
    age?: number;
}
type Tuple = [string, number, object?];

以上就是TypeScript類型使用示例剖析的詳細內(nèi)容,更多關(guān)于TypeScript類型剖析的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • js驗證真實姓名與身份證號是否匹配

    js驗證真實姓名與身份證號是否匹配

    使用javascript技術(shù)驗真實姓名,要用到unicode字符來匹配,由于中國人的姓名長度一般是在2-4這個范圍內(nèi),所以重復匹配{2,4}次。接下來,通過本文給大家分享js驗證省份證號與真實姓名是否匹配,需要的朋友可以參考下
    2015-10-10
  • Bootstrap CSS組件之導航條(navbar)

    Bootstrap CSS組件之導航條(navbar)

    這篇文章主要為大家詳細介紹了Bootstrap CSS組件之導航條(navbar),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • javascript阻止事件冒泡和瀏覽器的默認行為

    javascript阻止事件冒泡和瀏覽器的默認行為

    本篇文章主要介紹了javascript阻止事件冒泡和瀏覽器的默認行為。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • amd、cmd、esmodule、commonjs區(qū)別詳解

    amd、cmd、esmodule、commonjs區(qū)別詳解

    本文主要介紹了amd、cmd、esmodule、commonjs區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • uniapp實現(xiàn)微信小程序支付(前端)詳細代碼

    uniapp實現(xiàn)微信小程序支付(前端)詳細代碼

    這篇文章主要給大家介紹了關(guān)于uniapp實現(xiàn)微信小程序支付(前端)的相關(guān)資料,發(fā)現(xiàn)網(wǎng)上教程很多,單只針對小程序的簡單清晰的流程卻很少,文字通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • 淺析JavaScript中的Proxy對象

    淺析JavaScript中的Proxy對象

    Proxy是JavaScript的一個內(nèi)置對象,它允許您攔截并自定義對象的行為。本文將和大家簡單聊聊JavaScript中Proxy對象的創(chuàng)建與使用,感興趣的可以了解一下
    2023-03-03
  • javascript實現(xiàn)評分功能

    javascript實現(xiàn)評分功能

    這篇文章主要為大家詳細介紹了javascript實現(xiàn)評分功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 惰性函數(shù)定義模式 使用方法

    惰性函數(shù)定義模式 使用方法

    惰性函數(shù)定義模式 使用方法...
    2007-09-09
  • Three.js 再探 - 寫一個微信跳一跳極簡版游戲

    Three.js 再探 - 寫一個微信跳一跳極簡版游戲

    最近項目結(jié)束,很空閑,于是就試著仿照微信跳一跳寫了一個極簡版的游戲,到底簡單到什么程度呢?大家可以參考下本文
    2018-01-01
  • js 返回時間戳所對應的具體時間

    js 返回時間戳所對應的具體時間

    返回unix時間戳所對應的具體時間的代碼
    2010-07-07

最新評論

武胜县| 临漳县| 昌黎县| 榕江县| 文登市| 青海省| 浮梁县| 华蓥市| 碌曲县| 平罗县| 吴江市| 洛阳市| 利津县| 高州市| 罗山县| 茌平县| 闸北区| 乌兰察布市| 新竹县| 襄汾县| 稷山县| 西盟| 霍州市| 当涂县| 江陵县| 上饶县| 东兴市| 沂水县| 潞城市| 比如县| 当涂县| 辛集市| 天门市| 盘山县| 武鸣县| 闵行区| 丹巴县| 布拖县| 曲沃县| 呼图壁县| 万山特区|