02.22 Typescript,我永遠不會回到JavaScript了

但是我喜歡遺留的遺產

Typescript,我永遠不會回到JavaScript了

JavaScript可能是現代網絡的事實上的語言,但長期以來,它也是我選擇腳本編寫的語言。 使用Python進行編碼很有趣,但是如果我有一些自動化的東西,我會去用node。 我選擇的服務器端語言曾經是C#,但如今它雖然功能強大,但感覺卻很笨拙。 我曾經天真的將Node描述為"氾濫成災",它滿足了我編寫的所有內容的需求。 我什至可以用多種不同的方式用JavaScript編寫Android和iOS應用程序。

並不是說它是適用於一切的完美工具,但是多年來我一直為我服務。 我一直在諷刺地承認在家庭主力馬網上出現的缺陷,包括加里·伯恩哈特(Gary Bernhardt)嘲諷的" Wat?"。 閃電般的談話讓我仍在思考。 如果您以前從未看過它,請立即停止閱讀並繼續觀看。 您可以稍後感謝我。

閃電般的談話已成為我推薦給前端開發人員的推薦閱讀清單(查看清單還是消耗清單?)的一部分,還有喬納森·克里默的" 23世紀JavaScript架構"。 儘管自ES6問世以來,上一篇文章中的某些內容似乎是多餘的,但是它對於解釋JavaScript所需的思路還有很長的路要走,這需要從"常規"編程語言(如果有的話)轉變思維方式。 僅那篇文章是我5年前開始自己的JavaScript Odyssey的大部分原因。

那麼,為什麼我現在揚言要離開,再也不回來了? 答案很簡單。 打字稿。

什麼是Typescript?

我假設您聽說過Typescript,但如果沒有,請嘗試總結一下:Typescript是強類型的Javascript。 它添加了您期望強類型語言的功能,並且需要一個編譯步驟(從技術上來說是"翻譯")才能將Typescript轉換為JavaScript。 這是因為瀏覽器不瞭解Typescript。 從技術上講,Typescript不會添加任何新的運行時功能,而是為開發人員添加功能。

我聽說有人形容Typescript是喜歡它還是討厭它,但是我還沒有和任何嘗試過並討厭它的人交談。 我已經與許多猶豫不決的人進行了交談-大約在2016年中,我就是其中之一。 但是,我聽到的同行對Typescript的最嚴厲批評是,這是一種額外的學習工具。 不僅是語言,而且還有構建過程。 但是,大多數現代的Web應用程序在其構建鏈中至少有一個鏈接以Babel的形式保留給JavaScript,Babel是一種允許較新的JavaScript在較舊的瀏覽器上運行的工具。 將TypeScript添加到該管道中不應該是火箭科學,尤其是因為Babel自v7起就支持Typescript編譯。

它不應該是火箭科學,但有時會有這種感覺,這就是Typescript新手有時會掙扎並回到瀏覽器中運行的JavaScript受歡迎的原因之一。

好處

但是正如我所說,我從未聽過有人採用Typescript併為此感到後悔。 好處遠勝於困難,尤其是在使用Angular CLI或Create React App的時代-兩者都使您可以在幾分鐘之內開始使用啟用了Typescript的新項目。

我假設您知道這些好處是什麼,但是如果您不知道,請允許我總結一下:

· Typescript的編譯步驟意味著您可以及早發現問題,而不必等待運行時失敗。

· 您的IDE現在可以在編譯步驟更早的時候提示您。 想象一下,當您引用一個不存在的變量或使用錯誤的參數調用函數時,您的IDE會告訴您! 真正的革命! (當然,因為"真正的"編程語言已經享受了多年,所以我一直在調侃。)編輯:我對此強調不夠。 我最近將一箇舊項目從JavaScript轉換為Typescript,以瞭解我從別人那裡繼承來的代碼庫的複雜性。 這是一個循序漸進的過程,在此期間,團隊繼續提供新功能,但是我們遇到了一些示例代碼,這些示例中我們錯誤地使用了第三方庫。 也許API發生了更改,或者有人誤讀了文檔,但是我們傳遞了某些配置變量,這些變量絕對沒有任何作用。 Typescript立即告訴我們,我們刪除了有問題的代碼。 顯然,它是不需要的,並且非常容易誤導。

· 當ECMAScript(驅動JavaScript的標準)中提出新功能時,TypeScript可以儘早採用它們,從而使您始終處於最前沿。

但實際上,主要好處是Typescript使您的代碼能夠以JavaScript無法做到的方式進行自我描述。 當我是項目的唯一開發人員時,JavaScript並不是很糟糕,因為我可以將所有事情都牢記在心,並且我擁有完美的記憶,對嗎? 錯誤。 即使是唯一的開發人員,我編寫的代碼也容易失憶。 如今,當我編寫普通的JavaScript時,我討厭不得不去閱讀函數定義以弄清楚如何使用它。 我不知道它返回什麼(如果有的話)或它接受什麼樣的參數。 我可能知道參數的數量及其名稱,但這並不總是足夠的:

<code>function doTheThing() {
let error = false;

// About a million lines of code that might cause an error

return error;
}

function consumeTheThing() {
let error = doTheThing();
if (error) {
// What do I do with the error now?
}
}/<code>

這就是我的意思。 "錯誤"是布爾值嗎? 當我看到第2行時,它看起來肯定是這樣,但是那到" doTheThing"末尾之間的一百萬行代碼又如何呢? 它可以是字符串,對象或知道什麼的人。

您可能會說這種靈活性是一種資產。 可能是這樣,但更常見的是它是一個陷阱,誘使您採用簡單的方式,這會在您和您的同伴之間引起許多微小的挫敗感。 曾經在別人的代碼中間,覺得自己在迷宮中嗎? 那就是別人的代碼。 您可以用JavaScript編寫"好的"代碼,但是很少有人鼓勵您這樣做。

這就是TypeScript的美。 這並不會迫使您成為一名優秀的開發人員。 但這為您提供了實現此目標的工具。

缺點

有缺點嗎? 當然有。

· 從字義上來說,更多的打字。 您可以更快地穿破鍵盤(對於使用蝶形鍵盤的人來說,這可能是個問題)。 沒什麼大不了的,但是一些JavaScript開發人員討厭必須用每個新函數或變量寫出類型。 您不必這樣做,但是如果您不使用類型,為什麼要使用Typescript?

· 由於您必須編譯代碼,因此每次更新和每次測試運行都將花費一點時間。 但是,我們正在談論幾秒鐘。 我使用Typescript節省的時間遠遠超過了編譯它所花費的時間。

· 有時,構建項目的複雜性可能是一個真正的痛苦。 這是真實的-如果您不熟悉構建工具,則設置新項目可能會令人沮喪。 在短期內,我的建議是找到一個入門項目以助您一臂之力—如果您正考慮使用那些框架,那麼上述Angular CLI和Create React App在這方面非常有用。 長期? 花時間學習工具-tsc,Babel,WebPack和所有這些好東西。 如果您使用的是節點,請嘗試ts-node。 如果您使用的是Mocha,請嘗試ts-mocha。 有一些簡單的捷徑可以幫助您入門。

有點像是我的觀點是單方面的-我並沒有在缺點和優點上投入太多精力 我想,出於同樣的原因,我不會花很多時間在每頓飯上都吃麥當勞的好處-這樣做的好處有限(不必再做飯了……我想就是這樣)。

未來

我認為Typescript不會在短期內取代JavaScript-瞭解後者對於使前者發揮作用至關重要。 而且我們不會看到Typescript在任何瀏覽器中本機運行。 它是一個預處理器,就像之前的CoffeeScript一樣。 Typescript和Coffescript之間的區別在於後者是對其所基於語言的根本改變。 Typescript是自然的演變。 這不僅使學習變得更容易,而且使將JavaScript項目轉換為Typescript的過程更加繁瑣。 首先將* .js重命名為* .ts。 現在,您有了Typescript項目! 然後,您可以一次開始採用語言功能。 我不能保證這會很容易,但是它將告訴您有關JavaScript從未有過的事情。 當您開始下一個項目時,Typescript編譯器將等待

這就是為什麼我永不回頭。

(本文翻譯自Jamie Morris的文章《I'll Never Go Back to JavaScript》,參考:https://levelup.gitconnected.com/ill-never-go-back-to-javascript-16370dc264a0)


分享到:


相關文章: