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

TypeScript如何開啟嚴格空值檢查

 更新時間:2022年03月30日 16:06:56   作者:?搞前端的半夏?  
這篇文章主要介紹了TypeScript如何開啟嚴格空值檢查,文章圍繞TypeScript的相關(guān)資料展開詳情內(nèi)容,需要的小伙伴可以參考一下

TypeScript里,JS中的基本數(shù)據(jù)類型undefined和null兩者各自有自己的類型分別叫做undefined和null。let u: undefined = undefined;let n: null = null;默認情況下null和undefined是所有類型的子...

let u: undefined = undefined;
let n: null = null;

默認情況下nullundefined是所有類型的子類型。 就是說你可以把nullundefined賦值給number類型的變量。

例如下面的代碼,在TS中是完全可以執(zhí)行的。

let userName: string;
userName = "搞前端的半夏";  // OK
userName = null;      // OK
userName = undefined; // OK

let age: number;
age = 18;        // OK
age = null;      // OK
age = undefined; // OK

let isBoy: boolean;
isBoy = true;      // OK
isBoy = false;     // OK
isBoy = null;      // OK
isBoy = undefined; // OK

在編程過程成空指針是最常見的bug之一,但是在TypeScript中我們無法使用具體的類型來表示特定的變量不能為空!幸運的是,TypeScript 2.0 解決了這個問題!。

一、strictNullChecks

TypeScript 2.0 增加了對不可為空類型的支持。有一種新的嚴格空值檢查模式,他提供了strictNullChecks

來限制對空值的檢查。可以通過在命令行上添加--strictNullChecks參數(shù)來啟功嚴格空值檢查。也可以在項目的tsconfig.json文件中啟用strictNullChecks編譯器選項。

在TS中,為了各版本的兼容,strictNullChecks的默認值是false

{
  "compilerOptions": {
    "strictNullChecks": true
    // ...
  }
}

在TS官方的演練場中你可以勾選strictNullChecks來啟用嚴格空值檢查!

image-20220306223611971

注意點1

在嚴格空值檢查模式下,null和undefined無法賦值給其他類型的變量。

例如下面的代碼在*strictNullChecks=true下,是無法編譯通過的。

let userName: string;
userName = "搞前端的半夏";  // OK
userName = null;      // OK
userName = undefined; // OK

image-20220306223913935

注意點2

嚴格空值檢查并不意味著變量的類型無法設(shè)置為null和undefined

例如下面的代碼在*strictNullChecks=true下,正常編譯通過的。

let userName: null;
userName = null;  

let age: undefined;
age = undefined;  

image-20220306224456016

二、變量如何可以為空

在正常的編程中,我們并不會直接將一個變量的類型設(shè)置為null或者undefined,例如username,我們通常設(shè)置為string類型。

如果我們想要username可以接受空值我們該怎么辦呢?

1. 使用聯(lián)合類型

聯(lián)合類型(Union Types)表示取值可以為多種類型中的一種。

對于下面的代碼,userName可以接受null類型的值。但是無法接受undefined的值

let userName: string | null;
userName = "搞前端的半夏";  // OK
userName = null;      // OK
userName = undefined; // Error

image-20220306225028895

2. a? 默認undefined

聯(lián)合類型可以在Object中使用

type User = {
  name: string ;
  age:number | undefined
};

這里我們設(shè)置age的類型為numberundefined

下面的兩種用法都是正確的。

let user1: User = { name: "搞前端的半夏", age: undefined };
let user2: User = { name: "搞前端的半夏", age: 18 };

如果我們想要下面的效果,不需要手動給age賦值

let user2: User = { name: "搞前端的半夏"};

此時我們就需要用到**?**來使屬性成為可選,這樣我們就可以完全省略age屬性的定義。

type User = {
  name: string ;
  age?:number 
};

請注意,在這種情況下:undefined類型會自動添加到聯(lián)合類型中。因此,以下所有賦值都是正確的:

let user1: User = { name: "搞前端的半夏", age: undefined };
let user2: User = { name: "搞前端的半夏", age: 18 };
let user3: User = { name: "搞前端的半夏"};

三、安全檢查

1. 變量可空的安全檢查

如果變量的類型包含nullor undefined,則訪問任何屬性都會產(chǎn)生編譯時錯誤:

function UserNameLength(userName: string | null) {
  return userName.length;
}

image-20220306232041298

所以在訪問屬性之前,必須要先判斷變量的值是否為空!

function UserNameLength(userName: string | null) {
  if (userName === null) {
    return 0;
  }

  return userName.length;
}

四、可空類型的函數(shù)調(diào)用

在JS中支持回調(diào)函數(shù),所以函數(shù)的參數(shù)會可能是函數(shù)類型,

function fn(callback?: () => void) {
  callback();
}

如果該參數(shù)是可選的函數(shù)類型,TS會將該參數(shù)加上undefined類型。

image-20220306232605352

那么這個函數(shù)的我們在調(diào)用函數(shù)的時候會報錯!

image-20220306232526506

類似于在訪問屬性之前檢查對象,我們需要首先檢查函數(shù)是否具有非空值:

function fn(callback?: () => void) {
  if (callback) {
    callback();
  }
}

到此這篇關(guān)于TypeScript如何開啟嚴格空值檢查的文章就介紹到這了,更多相關(guān)TypeScript嚴格空值檢查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解ES9的新特性之異步遍歷Async iteration

    詳解ES9的新特性之異步遍歷Async iteration

    在ES6中,引入了同步iteration的概念,隨著ES8中的Async操作符的引用,是不是可以在一異步操作中進行遍歷操作呢?今天要給大家講一講ES9中的異步遍歷的新特性Async iteration。
    2021-06-06
  • js實現(xiàn)連個數(shù)字相加而不是拼接的方法

    js實現(xiàn)連個數(shù)字相加而不是拼接的方法

    這篇文章主要介紹了js如何實現(xiàn)連個數(shù)字相加而不是拼接,需要的朋友可以參考下
    2014-02-02
  • js自制圖片放大鏡功能

    js自制圖片放大鏡功能

    這篇文章主要為大家詳細介紹了js自制圖片放大鏡功能的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • OpenLayer3自定義測量控件MeasureTool

    OpenLayer3自定義測量控件MeasureTool

    這篇文章主要為大家詳細介紹了OpenLayer3自定義測量控件MeasureTool,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 超簡單的微信小程序輪播圖

    超簡單的微信小程序輪播圖

    這篇文章主要為大家詳細介紹了超簡單的微信小程序輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 小程序跨頁面交互的作用與方法詳解

    小程序跨頁面交互的作用與方法詳解

    這篇文章主要介紹了小程序跨頁面交互的作用與方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • javascript權(quán)威指南 學習筆記之javascript數(shù)據(jù)類型

    javascript權(quán)威指南 學習筆記之javascript數(shù)據(jù)類型

    JavaScript中允許使用三種基本數(shù)據(jù)類型 數(shù)字,文本字符和布爾值。其中數(shù)字包括符點數(shù).此外,它還支持兩種小數(shù)據(jù)類型 -null(空)和undefined(未定義),該兩種小數(shù)據(jù)類型,它們各自只定義了一個值 。
    2011-09-09
  • JS遍歷對象屬性的方法示例

    JS遍歷對象屬性的方法示例

    這篇文章主要介紹了JS遍歷對象屬性的方法,涉及JS針對頁面元素屬性遍歷操作的相關(guān)技巧,需要的朋友可以參考下
    2017-01-01
  • C#程序員入門學習微信小程序的筆記

    C#程序員入門學習微信小程序的筆記

    這篇文章主要給大家分享了一位C#程序員入門學習微信小程序的筆記,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • 在JavaScript中使用for循環(huán)的方法

    在JavaScript中使用for循環(huán)的方法

    這篇文章主要介紹了如何在JavaScript中使用for循環(huán),通過使用JavaScript?for...in循環(huán),我們可以循環(huán)對象的鍵或?qū)傩?,在迭代對象屬性或進行調(diào)試時,它可能很有用,但在迭代數(shù)組或?qū)ο筮M行修改時,應(yīng)該避免使用for...in循環(huán),需要的朋友可以參考下
    2022-11-11

最新評論

迁安市| 新丰县| 白水县| 湟中县| 上饶县| 六枝特区| 伊吾县| 武宁县| 普兰店市| 汝阳县| 江西省| 万源市| 肃宁县| 垣曲县| 霍山县| 南昌县| 铁岭县| 皮山县| 黄梅县| 慈溪市| 太白县| 安多县| 长乐市| 鹰潭市| 呼图壁县| 涞源县| 双桥区| 太和县| 阜平县| 湘阴县| 包头市| 祥云县| 廊坊市| 醴陵市| 河西区| 潮安县| 武强县| 晋江市| 泽普县| 泰州市| 鹤山市|