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

TypeScript?類型斷言的幾種實現(xiàn)

 更新時間:2024年01月17日 15:16:18   作者:前端玖耀里  
本文主要介紹了TypeScript?類型斷言的實現(xiàn),有使用關(guān)鍵字as和標(biāo)簽<>兩種方式,具有一定的參考價值,感興趣的可以了解一下

本節(jié)介紹類型斷言,有使用關(guān)鍵字 as 和標(biāo)簽 <> 兩種方式,因后者會與JSX 語法沖突,建議統(tǒng)一使用 as 來進(jìn)行類型斷言。

1. 解釋

TypeScript 允許你覆蓋它的推斷,畢竟作為開發(fā)者你比編譯器更了解你寫的代碼。

類型斷言主要用于當(dāng) TypeScript 推斷出來類型并不滿足你的需求,你需要手動指定一個類型。

2. 關(guān)鍵字 as

當(dāng)你把 JavaScript 代碼遷移到 TypeScript 時,一個常見的問題:

const user = {}

user.nickname = 'Evan'  // Error, Property 'nickname' does not exist on type '{}'
user.admin = true       // Error, Property 'admin' does not exist on type '{}'

代碼解釋: 編譯器推斷 const user: {},這是一個沒有屬性的對象,所以你不能對其添加屬性。

此時可以使用類型斷言(as關(guān)鍵字)覆蓋其類型推斷:

interface User {
  nickname: string,
  admin: boolean,
  groups: number[]
}

const user = {} as User

user.nickname = 'Evan' 
user.admin = true       
user.groups = [2, 6]

代碼解釋:

第 7 行,這里通過 as 關(guān)鍵字進(jìn)行類型斷言,將變量 user 的類型覆蓋為 User 類型。但是請注意,類型斷言不要濫用,除非你完全明白你在干什么。

3. 首尾標(biāo)簽

類型斷言還可以通過標(biāo)簽 <> 來實現(xiàn):

interface User {
  nickname: string,
  admin: boolean,
  groups: number[]
}

const user = <User>{} // User類型

user.nickname = 'Evan' 
user.admin = true       
user.groups = [2, 6]

代碼解釋:

第 7 行,使用 <User>{} 這種標(biāo)簽形式,將變量 user 強制斷言為 User 類型。

但是,當(dāng)你在使用 JSX 語法時,會跟標(biāo)簽 <> 形式的類型斷言混淆:

let nickname = <User>Evan</User>  // 這里的 User 指向一個 component

所以,建議統(tǒng)一使用 as type 這種語法來為類型斷言。

4. 非空斷言 !

如果編譯器不能夠去除 null 或 undefined,可以使用非空斷言 ! 手動去除。

function fixed(name: string | null): string {
  function postfix(epithet: string) {
    return name!.charAt(0) + '.  the ' + epithet; // name 被斷言為非空
  }
  name = name || "Bob"
  return postfix("great")
}

代碼解釋:

第 2 行,postfix() 是一個嵌套函數(shù),因為編譯器無法去除嵌套函數(shù)的 null (除非是立即調(diào)用的函數(shù)表達(dá)式),所以 TypeScript 推斷第 3 行的 name 可能為空。

第 5 行,而 name = name || "Bob" 這行代碼已經(jīng)明確了 name 不為空,所以可以直接給 name 斷言為非空(第 3 行)。

5. 雙重斷言

雙重斷言極少有應(yīng)用場景,只需要知道有這種操作即可:

interface User {
  nickname: string,
  admin: boolean,
  group: number[]
}

const user = 'Evan' as any as User

代碼解釋: 最后一行,使用 as 關(guān)鍵字進(jìn)行了兩次斷言,最終變量 user 被強制轉(zhuǎn)化為 User 類型。

6. 小結(jié)

本節(jié)介紹了幾種類型斷言的方法,需要注意:

  • 慎用類型斷言,除非你真的有把握。
  • 類型斷言是一個編譯時語法,不涉及運行時。

到此這篇關(guān)于TypeScript 類型斷言的幾種實現(xiàn)的文章就介紹到這了,更多相關(guān)TypeScript 類型斷言內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 原生js寫的放大鏡效果

    原生js寫的放大鏡效果

    在淘寶上購物時,總會看到類似放大鏡的效果。以下為原生js寫的一個放大鏡效果,其中肯定有很多不足,請大牛們指正,謝啦
    2012-08-08
  • 新浪的圖片新聞效果

    新浪的圖片新聞效果

    新浪的圖片新聞效果...
    2007-01-01
  • js入門之Function函數(shù)的使用方法【新手必看】

    js入門之Function函數(shù)的使用方法【新手必看】

    本篇文章主要介紹js Function函數(shù)的使用方法,應(yīng)該對初學(xué)Js的朋友們會有所幫助,下面就隨小編一起來看下吧
    2016-11-11
  • JAVASCRIPT代碼編寫俄羅斯方塊網(wǎng)頁版

    JAVASCRIPT代碼編寫俄羅斯方塊網(wǎng)頁版

    俄羅斯方塊方塊是小時候的一個回憶,從最開始的掌上的黑白游戲機,到電視游戲機,到電腦,無不有它的痕跡,今天我們來一起重溫它的一種實現(xiàn)方法,也算是整理一下我的思路吧,感興趣的小伙伴一起學(xué)習(xí)吧
    2015-11-11
  • JS遍歷JSON數(shù)組及獲取JSON數(shù)組長度操作示例【測試可用】

    JS遍歷JSON數(shù)組及獲取JSON數(shù)組長度操作示例【測試可用】

    這篇文章主要介紹了JS遍歷JSON數(shù)組及獲取JSON數(shù)組長度操作,涉及javascript簡單json數(shù)組遍歷與運算相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • uniapp跨頁面?zhèn)鲄⒌膸追N方式小結(jié)

    uniapp跨頁面?zhèn)鲄⒌膸追N方式小結(jié)

    當(dāng)我們在開發(fā)Uni-app應(yīng)用時,經(jīng)常會遇到需要在不同頁面之間傳遞參數(shù)的情況,為了實現(xiàn)跨頁面?zhèn)鲄?Uni-app提供了幾種方式,所以本文小編將給大家介紹一下uniapp跨頁面?zhèn)鲄⒌膸追N方式,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-01-01
  • JavaScript判斷文件上傳類型的方法

    JavaScript判斷文件上傳類型的方法

    這篇文章主要介紹了JavaScript判斷文件上傳類型的方法,可實現(xiàn)針對重復(fù)的內(nèi)容也能觸發(fā)onchange事件,需要的朋友可以參考下
    2014-09-09
  • JavaScript bind函數(shù)手寫教程

    JavaScript bind函數(shù)手寫教程

    bind()方法主要就是將函數(shù)綁定到某個對象,bind()會創(chuàng)建一個函數(shù),函數(shù)體內(nèi)的this對象的值會被綁定到傳入bind()第一個參數(shù)的值,當(dāng)然這是綁定哦,不是像call、apply一樣直接執(zhí)行,apply要執(zhí)行的話還得自己調(diào)用
    2022-12-12
  • 獲取中文字符串的實際長度代碼

    獲取中文字符串的實際長度代碼

    某些情況下我們需要獲取中文字符串的實際長度,下面有個示例,大家可以參考下
    2014-06-06
  • 基于Arcgis for javascript實現(xiàn)百度地圖ABCD marker的效果

    基于Arcgis for javascript實現(xiàn)百度地圖ABCD marker的效果

    本篇文章由腳本之家小編給大家分享的基于Arcgis for javascript實現(xiàn)百度地圖ABCD marker的效果,需要的朋友一起學(xué)習(xí)吧
    2015-09-09

最新評論

兴隆县| 通许县| 巴马| 天等县| 新和县| 穆棱市| 德化县| 阳春市| 墨玉县| 太和县| 陈巴尔虎旗| 孟州市| 衢州市| 邢台县| 贵南县| 辽阳县| 渭南市| 罗定市| 信阳市| 泗水县| 招远市| 玛沁县| 郓城县| 永清县| 乌恰县| 宁安市| 禄丰县| 分宜县| 宣汉县| 友谊县| 罗甸县| 张家口市| 漾濞| 西青区| 枣阳市| 北碚区| 噶尔县| 溧水县| 滨州市| 久治县| 措美县|