摘要:因?yàn)闃?biāo)志在時(shí)添加的,所以它的使用還沒(méi)有那么廣泛。截至年月,項(xiàng)目和項(xiàng)目中使用了該標(biāo)志,而或都沒(méi)有使用該標(biāo)志。如果執(zhí)行條件檢查可以推斷某些內(nèi)容是非空的。然而,對(duì)于三元運(yùn)算符來(lái)說(shuō),不幸的是情況并非如此。
原文2017年7月發(fā)布并于2017年9月更新我應(yīng)該使用strictnullcheck TypeScript編譯器標(biāo)志嗎?strictnullcheck(嚴(yán)格的null檢查)
空指針是最常見(jiàn)的bug之一,而通過(guò)strictnullcheck TypeScript編譯器標(biāo)志可以在很大程度上避免空指針。因?yàn)?b>strictnullcheck標(biāo)志在TypeScript 2時(shí)添加的,所以它的使用還沒(méi)有那么廣泛。截至2017年9月,Angular項(xiàng)目和typeORM項(xiàng)目中使用了該標(biāo)志,而VSCode、RxJS、ionor或Babylon.js都沒(méi)有使用該標(biāo)志。此外,新建一個(gè)TypeScript項(xiàng)目時(shí)strictnullcheck并不默認(rèn)開(kāi)啟,以保證向后兼容,并保持TypeScript是JavaScript的超集。
如果你準(zhǔn)備編寫(xiě)一個(gè)新TypeScript項(xiàng)目,或者有時(shí)間將strictnullcheck標(biāo)志引入到現(xiàn)有的項(xiàng)目中,我建議你這樣做。你的應(yīng)用會(huì)因此具備更高的安全性,使用嚴(yán)格的null檢查也不會(huì)打亂代碼,因應(yīng)用程序本應(yīng)包含這些檢查。缺點(diǎn)是新開(kāi)發(fā)人員還需要學(xué)習(xí)一個(gè)概念。對(duì)我來(lái)說(shuō),利大于弊,所以我建議打開(kāi)嚴(yán)格的空檢查。
嚴(yán)格的空檢查的一個(gè)例子是:
tsconfig.json
{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": true, "strictNullChecks": true, "outDir": "./dist" }, "include": [ "src/**/*" ] }
src/user.ts
interface User { name: string; age?: number; } function printUserInfo(user: User) { console.log(`${user.name}, ${user.age.toString()}`) // => error TS2532: Object is possibly "undefined". console.log(`${user.name}, ${user.age!.toString()}`) // => OK, you confirm that you"re sure user.age is non-null. // => 好的,你已經(jīng)確認(rèn)user.age是非空的。 if (user.age != null) { console.log(`${user.name}, ${user.age.toString()}`) } // => OK, the if-condition checked that user.age is non-null. // => 好的,if條件檢查了user.age是非空的。 console.log(user.name + ", " + user.age != null ? user.age.toString() : "age unknown"); // => Unfortunately TypeScript can"t infer that age is non-null here. // => 不幸的是TypeScript不能在這里推斷年齡是非空的。(譯注:截止至2019年7月16日,TS依舊會(huì)報(bào)此錯(cuò)) }
如上所述:
感嘆號(hào)表示你確信(例如,通過(guò)在代碼中的某個(gè)地方執(zhí)行檢查)可能為空的變量實(shí)際上是非空的。
如果執(zhí)行If條件檢查, TypeScript可以推斷某些內(nèi)容是非空的。
然而,對(duì)于三元運(yùn)算符來(lái)說(shuō),不幸的是情況并非如此。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/110288.html
摘要:首先聲明這篇文章是想說(shuō)明一下最新版本的的新特性帶來(lái)的極大的開(kāi)發(fā)體驗(yàn)提升而不是如何利用開(kāi)發(fā)應(yīng)用這個(gè)特性就是對(duì)的支持在的中有說(shuō)明具體可以參考這里在版本之前我們?cè)陂_(kāi)發(fā)應(yīng)用尤其是在配合一類庫(kù)的時(shí)候經(jīng)常用到諸如之類的封裝而這些函數(shù)其實(shí)都可以用裝飾器的 首先聲明, 這篇文章是想說(shuō)明一下最新版本的 TypeScript(3.0) 的新特性帶來(lái)的極大的 React 開(kāi)發(fā)體驗(yàn)提升. 而不是如何利用 Ty...
摘要:本套課程包含兩大部分,第一部分是基礎(chǔ)部分,也是重要部分,參考官方文檔結(jié)構(gòu),針對(duì)內(nèi)容之間的關(guān)聯(lián)性和前后順序進(jìn)行合理調(diào)整。 showImg(https://segmentfault.com/img/bVbpBA0?w=1460&h=400); 講師簡(jiǎn)介: iview 核心開(kāi)發(fā)者,iview-admin 作者,百萬(wàn)級(jí)虛擬渲染表格組件 vue-bigdata-table 作者。目前就職于知名互...
摘要:基本類型在中,提供了一下基本數(shù)據(jù)類型布爾類型數(shù)據(jù)類型字符串類型數(shù)組類型元組類型枚舉類型任意值類型和類型類型其中元組枚舉任意值類型和類型是有別與的特有類型。布爾類型布爾類型是最簡(jiǎn)單的數(shù)據(jù)類型,只有和兩種值。 學(xué)習(xí)Angular 2 , 《揭秘Angular 2》讀書(shū)筆記。Angular2 選擇 TypeScript 作為其官方最主要的構(gòu)建語(yǔ)音,這意味著掌握 TypeScript 語(yǔ)音將更...
摘要:原文地址原文作者譯者校對(duì)者和其他人有一些關(guān)于比較好的博文,跟隨這些博文,我最近開(kāi)始使用。今天,我將展示如何從零開(kāi)始建立一個(gè)工程,以及如何使用管理構(gòu)建過(guò)程。我也將陳述關(guān)于的第一印象,尤其是使用和。 原文地址:Getting started with TypeScript and React 原文作者:Jack_Franklin 譯者:luxj 校對(duì)者:veizz Tom Dale...
摘要:為了由簡(jiǎn)入繁,不妨將這些類型劃分為基本類型復(fù)合類型。以下將漸進(jìn)式的對(duì)的這些類型進(jìn)行了解。實(shí)際上,有一種屬性描述對(duì)象,是通過(guò)獲取的。但無(wú)論如何,類型檢查是可以排除大部分錯(cuò)誤的。在函數(shù)的類型聲明中,繼續(xù)來(lái)鞏固這條規(guī)則的寫(xiě)法。 幾個(gè)月前把 ES6 的特性都過(guò)了一遍,收獲頗豐?,F(xiàn)在繼續(xù)來(lái)看看 TypesScript(下文簡(jiǎn)稱為 TS)。限于經(jīng)驗(yàn),本文一些總結(jié)如有不當(dāng),歡迎指正。 概述 官網(wǎng)有這...
閱讀 852·2021-11-16 11:56
閱讀 1675·2021-11-16 11:45
閱讀 3123·2021-10-08 10:13
閱讀 4113·2021-09-22 15:27
閱讀 734·2019-08-30 11:03
閱讀 651·2019-08-30 10:56
閱讀 957·2019-08-29 15:18
閱讀 1749·2019-08-29 14:05