TypeScript使用strictnullcheck實(shí)戰(zhàn)解析
strictnullcheck(嚴(yán)格的null檢查)
應(yīng)該使用strictnullcheck TypeScript編譯器標(biāo)志嗎?
空指針是最常見的bug之一,而通過strictnullcheck
TypeScript編譯器標(biāo)志可以在很大程度上避免空指針。因?yàn)?code>strictnullcheck標(biāo)志在TypeScript 2時(shí)添加的,所以它的使用還沒有那么廣泛。截至2017年9月,Angular項(xiàng)目和typeORM項(xiàng)目中使用了該標(biāo)志,而VSCode、RxJS、ionor或Babylon.js都沒有使用該標(biāo)志。此外,新建一個(gè)TypeScript項(xiàng)目時(shí)strictnullcheck
并不默認(rèn)開啟,以保證向后兼容,并保持TypeScript是JavaScript的超集。
如果你準(zhǔn)備編寫一個(gè)新TypeScript項(xiàng)目,或者有時(shí)間將strictnullcheck標(biāo)志引入到現(xiàn)有的項(xiàng)目中,我建議你這樣做。你的應(yīng)用會因此具備更高的安全性,使用嚴(yán)格的null檢查也不會打亂代碼,因應(yīng)用程序本應(yīng)包含這些檢查。缺點(diǎn)是新開發(fā)人員還需要學(xué)習(xí)一個(gè)概念。對我來說,利大于弊,所以我建議打開嚴(yán)格的空檢查。
嚴(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依舊會報(bào)此錯) }
如上所述:
- 感嘆號表示你確信(例如,通過在代碼中的某個(gè)地方執(zhí)行檢查)可能為空的變量實(shí)際上是非空的。
- 如果執(zhí)行If條件檢查, TypeScript可以推斷某些內(nèi)容是非空的。
- 然而,對于三元運(yùn)算符來說,不幸的是情況并非如此。
翻譯自原文:https://www.tsmean.com/articles/learn-typescript/strict-null-checks-best-practice/
以上就是TypeScript使用strictnullcheck實(shí)戰(zhàn)解析的詳細(xì)內(nèi)容,更多關(guān)于TypeScript使用strictnullcheck的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
TypeScript使用strictnullcheck實(shí)戰(zhàn)解析
這篇文章主要為大家介紹了TypeScript使用strictnullcheck實(shí)戰(zhàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08TypeScript類型any never void和unknown使用場景區(qū)別
這篇文章主要為大家介紹了TypeScript類型any never void和unknown使用場景區(qū)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10詳解什么是TypeScript里的Constructor?signature
這篇文章主要介紹了什么是TypeScript里的Constructor?signature詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07TypeScript手寫一個(gè)簡單的eslint插件實(shí)例
這篇文章主要為大家介紹了TypeScript手寫一個(gè)簡單的eslint插件實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02TypeScript防抖節(jié)流函數(shù)示例詳解
這篇文章主要為大家介紹了TypeScript防抖節(jié)流函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08