如何將JavaScript程序移植到TypeScript?
譯文譯者 | 布加迪
審校 | 重樓
JavaScript最初于1995年發(fā)布,經(jīng)歷短短的發(fā)展階段后,已成為許多網(wǎng)站和應(yīng)用程序不可或缺的一部分。如今,JavaScript在客戶端應(yīng)用程序和服務(wù)器端應(yīng)用程序中都占有一席之地。盡管這些年來JavaScript發(fā)生了許多變化,但開發(fā)人員仍然需要眾多特性。
TypeScript是一種擴(kuò)展JavaScript的腳本語言,提供了許多期待已久的特性。類型注釋、自定義類型和接口都是主要組件,還有提高生產(chǎn)力的更好工具。
為什么要轉(zhuǎn)換?
面對(duì)重大項(xiàng)目,轉(zhuǎn)換語言可能會(huì)帶來壓力。對(duì)考慮這項(xiàng)任務(wù)的任何人來說值得慶幸的是,將一個(gè)項(xiàng)目從JavaScript移植到TypeScript的過程卻很簡單。
作為一種主要的編程語言,JavaScript在過去幾年越來越受歡迎。最初只用于網(wǎng)站的前端腳本,但Node.js的發(fā)布將JavaScript引入到服務(wù)器端,幫助提升了人氣。
雖然JavaScript最近變得越來越流行,但最新發(fā)現(xiàn):ES6依然缺少很多特性。對(duì)于許多開發(fā)人員來說,這些缺失的特性限制了JavaScript這種語言的有用性。
TypeScript旨在糾正這些問題,為此用額外的特性包裝JavaScript,然后轉(zhuǎn)譯用戶代碼。一種具有JavaScript易用性和可用性的類型安全語言由此誕生。
目前已經(jīng)有幾個(gè)工具和框架對(duì)TypeScript提供全面支持。長期以來,Angular一直使用TypeScript,連React也有實(shí)現(xiàn)TypeScript的方法。
TypeScript就像JavaScript增強(qiáng)版
TypeScript實(shí)現(xiàn)了開發(fā)人員經(jīng)常對(duì)JavaScript請(qǐng)求的許多特性。TypeScript以它實(shí)現(xiàn)的完整類型系統(tǒng)命名,包括類型檢查、安全性和隱式類型等特性。TypeScript甚至允許您定義和使用自定義命名空間。
TypeScript還包含接口、枚舉和類型推斷。TypeScript保留了對(duì)來自最新JavaScript實(shí)現(xiàn)的特性以及舊特性的支持,還添加了一套新特性。
總的來說,TypeScript致力于創(chuàng)建一個(gè)更安全的開發(fā)過程,輔以更強(qiáng)大的工具以幫助碼農(nóng)。
它鼓勵(lì)使用類型安全的代碼
TypeScript使用內(nèi)置的類型檢查系統(tǒng)來驗(yàn)證變量類型。它包括一組標(biāo)準(zhǔn)類型,可以選擇定義自己的類和類型。它可以顯式聲明類型,也可以根據(jù)賦值推斷類型。
TypeScript有幾種標(biāo)準(zhǔn)的數(shù)據(jù)類型,包括字符串、數(shù)字、布爾值和元組。還有變量類型,比如unknown和any,它們?cè)试S您使用弱類型代碼。
TypeScript的類型推斷允許您通過讓TypeScript的轉(zhuǎn)譯器處理標(biāo)準(zhǔn)的JavaScript代碼,對(duì)這類代碼甚至執(zhí)行類型檢查。
轉(zhuǎn)譯使它易于使用
從開發(fā)人員的角度來看,TypeScript最好的特性之一就是它輸出的是常規(guī)的JavaScript。您可以通過名為轉(zhuǎn)譯的過程來運(yùn)行TypeScript代碼,這個(gè)過程類似編譯。
轉(zhuǎn)譯的結(jié)果不是可執(zhí)行文件,而是使用代碼原始語言以外的語言編寫的腳本。
TypeScript代碼被轉(zhuǎn)譯成JavaScript,然后您可以在服務(wù)器或客戶端上運(yùn)行。這使您可以快速輕松地編寫幾乎可以在任何平臺(tái)上運(yùn)行的代碼。
TypeScript幫助開發(fā)人員提高生產(chǎn)力
為JavaScript添加類型不僅允許代碼安全運(yùn)行,還為開發(fā)人員提供了簡化編碼的工具。大多數(shù)現(xiàn)代IDE都提供TypeScript支持,允許像IntelliSense這樣的代碼補(bǔ)全工具為代碼提供額外上下文。它還可以在您編碼時(shí)提供類型檢查功能,幫助您更迅速地揪出錯(cuò)誤。
此外,TypeScript額外的數(shù)據(jù)結(jié)構(gòu)和語法旨在提高代碼的可讀性。這些特性使用戶更快速更輕松地創(chuàng)建高質(zhì)量代碼,并及早發(fā)現(xiàn)潛在問題。
如何移植代碼?
如果您在開始著手全新的項(xiàng)目,創(chuàng)建新的TypeScript項(xiàng)目相當(dāng)簡單。然而,將一個(gè)已有的項(xiàng)目轉(zhuǎn)換成TypeScript就有點(diǎn)復(fù)雜了。
在大多數(shù)正常情況下,將一個(gè)項(xiàng)目從一種語言轉(zhuǎn)換成另一種語言可能令人望而生畏。然而,由JavaScript轉(zhuǎn)換成TypeScript異常簡單。
TypeScript作為JavaScript的超集
TypeScript被認(rèn)為是JavaScript的超集。這意味著TypeScript添加了額外的語法和功能,并沒有改變或刪除其底層的核心功能。
對(duì)于開發(fā)人員來說,這意味著任何在JavaScript中正常運(yùn)行的代碼都會(huì)自動(dòng)在TypeScript中正確運(yùn)行。不管這個(gè)腳本是用NodeJS編寫的Web服務(wù)器,還是一組用于網(wǎng)頁的前端腳本,轉(zhuǎn)換過程都非常簡單。
在安裝TypeScript轉(zhuǎn)譯器之后,您可以創(chuàng)建一個(gè)簡單的tsconfig.json文件,內(nèi)容如下:
{
"compilerOptions": {
"outDir": "./build",
"allowJs": true,
"target": "es5"
},
"include": ["./src/**/*"]
}
將所有適用的文件移到src目錄并運(yùn)行轉(zhuǎn)譯器。這將在build目錄中創(chuàng)建并生成JavaScript文件。
這些快速而簡單的改變可將標(biāo)準(zhǔn)的JavaScript項(xiàng)目轉(zhuǎn)換成TypeScript項(xiàng)目。此后,您可以隨意使用TypeScript提供的新特性,可以在變量上標(biāo)注類型、實(shí)現(xiàn)自定義類型和定義接口。
在每次轉(zhuǎn)譯之后,您可以根據(jù)需要使用來自build目錄的輸出,只需將文件添加到任何項(xiàng)目中。轉(zhuǎn)譯器將對(duì)標(biāo)準(zhǔn)JavaScript進(jìn)行類型檢查,并將新特性轉(zhuǎn)換成有效的ES5腳本。
從JS轉(zhuǎn)換成TS,您需要知道什么?
將一個(gè)項(xiàng)目從JavaScript轉(zhuǎn)換成TypeScript的過程非常簡單。轉(zhuǎn)換就像切換目錄結(jié)構(gòu)、添加配置文件和安裝轉(zhuǎn)譯器一樣簡單。
然而,從新語言中獲得所有好處可能是更漫長的項(xiàng)目。雖然TypeScript可以推斷出項(xiàng)目中每個(gè)變量的類型,但它們應(yīng)該被顯式聲明?;仡?/span>一番,為項(xiàng)目添加自定義類型、添加適當(dāng)?shù)淖⑨尯蛣?chuàng)建接口,這可能非常耗時(shí)。
然而,把這些特性添加到項(xiàng)目將便于您獲得適當(dāng)?shù)念愋蜋z查和擴(kuò)展工具所帶來的好處。大型項(xiàng)目構(gòu)建起來將更快速更輕松,您可以更早識(shí)別錯(cuò)誤,而新開發(fā)人員將更容易閱讀您的代碼。
原文標(biāo)題:How to Port Your JavaScript Program to TypeScript,作者:Seth M. Thomas