TypeScript strictness - 严格语法检查
不同的用戶(hù)使用 TypeScript 在類(lèi)型檢查器中尋找不同的東西。有些人正在尋找更寬松的選擇加入體驗(yàn),它可以幫助僅驗(yàn)證其程序的某些部分,并且仍然擁有不錯(cuò)的工具。這是 TypeScript 的默認(rèn)體驗(yàn),其中類(lèi)型是可選的,推理采用最寬松的類(lèi)型,并且不檢查潛在的 null/undefined 值。就像 tsc 在面對(duì)錯(cuò)誤時(shí)發(fā)出的信息一樣,這些默認(rèn)值被放置到位以避開(kāi)您。如果您正在遷移現(xiàn)有的 JavaScript,這可能是理想的第一步。
相比之下,許多用戶(hù)更喜歡讓 TypeScript 盡可能多地立即驗(yàn)證,這就是該語(yǔ)言也提供嚴(yán)格設(shè)置的原因。這些嚴(yán)格性設(shè)置將靜態(tài)類(lèi)型檢查從開(kāi)關(guān)(無(wú)論您的代碼是否被檢查)轉(zhuǎn)變?yōu)楦咏趽芴?hào)的東西。你把這個(gè)撥盤(pán)調(diào)得越遠(yuǎn),TypeScript 就會(huì)為你檢查越多。這可能需要一些額外的工作,但總的來(lái)說(shuō),從長(zhǎng)遠(yuǎn)來(lái)看,它是物有所值的,并且可以實(shí)現(xiàn)更徹底的檢查和更準(zhǔn)確的工具。如果可能,新的代碼庫(kù)應(yīng)該始終打開(kāi)這些嚴(yán)格性檢查。
TypeScript 有幾個(gè)可以打開(kāi)或關(guān)閉的類(lèi)型檢查嚴(yán)格標(biāo)志,除非另有說(shuō)明,否則我們所有的示例都將在啟用所有這些標(biāo)志的情況下編寫(xiě)。 CLI 中的 --strict 標(biāo)志或 tsconfig.json 中的 “strict”: true 同時(shí)切換它們,但我們可以單獨(dú)選擇退出它們。您應(yīng)該知道的兩個(gè)最大的問(wèn)題是 noImplicitAny 和 strictNullChecks:
noImplicitAny
回想一下,在某些地方,TypeScript 不會(huì)嘗試為我們推斷任何類(lèi)型,而是退回到最寬松的類(lèi)型:any。 這并不是可能發(fā)生的最糟糕的事情——畢竟,無(wú)論如何,回到任何只是普通的 JavaScript 體驗(yàn)。
然而,使用 any 通常首先會(huì)破壞使用 TypeScript 的目的。 您的程序類(lèi)型越多,您獲得的驗(yàn)證和工具就越多,這意味著您在編寫(xiě)代碼時(shí)會(huì)遇到更少的錯(cuò)誤。 打開(kāi) noImplicitAny 標(biāo)志將對(duì)類(lèi)型被隱式推斷為 any 的任何變量發(fā)出錯(cuò)誤。
strictNullChecks
默認(rèn)情況下,像 null 和 undefined 這樣的值可以分配給任何其他類(lèi)型。 這可以使編寫(xiě)一些代碼更容易,但忘記處理 null 和 undefined 是世界上無(wú)數(shù)錯(cuò)誤的原因——有些人認(rèn)為這是一個(gè)十億美元的錯(cuò)誤! strictNullChecks 標(biāo)志使處理 null 和 undefined 更加明確,讓我們不必?fù)?dān)心是否忘記處理 null 和 undefined。
更多Jerry的原創(chuàng)文章,盡在:“汪子熙”:
總結(jié)
以上是生活随笔為你收集整理的TypeScript strictness - 严格语法检查的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 蛋白不会做蛋糕的梗
- 下一篇: TypeScript Type Asse