某位偉人說過,沒有調查,就沒有發言權。

這是我基於 AI + TypeScript 寫的專案,花了大半年,提交了近 3000 次,TypeScript 可真是害苦我了。

我一氣之下,把 TypeScript 全部換成 JavaScript 了,一點 TypeScript 都不留。

之前含 TypeScript 量可是有 80% 以上的。
那麼接下來,就把我為什麼從全力使用 TypeScript,到全力拋弃 TypeScript 的思考分享出來。
首先疊個甲,這裡並不是說 TypeScript 本身不好,單純的就是 TypeScript 不適合我,或者說我個人太菜了。
很多時候,技術沒有好壞之分,只有合不合適,經過這半年多的時間,對這句話的理解更加深刻了。
我是在 2015 年入行的,經歷過 TypeScript 從名不經傳,到家喻戶曉的過程,但從業 10 年,我並沒有因為 TypeScript 的呼聲很高,而把 TypeScript 在我的專案中全面落地。
這也從側面說明,我是一個在技術方面,不追求新潮,也不追求強大的人,可能正應了那句話,我是一個在用著自己喜歡的技術,一直待在自己舒適區的人。
但 AI 的發展,讓我保持了 10 年的舒適區有了些許的鬆動。
TypeScript 作為前端領域革命性的變化,多多少少有所了解,但作為一個骨子裡極度喜歡自由的人,實在是不想被類型所束縛,也有過多次嘗試,但早已習慣了 JavaScript 的自由,用起來極其別扭。
在 AI 的協助下,我彷彿如有神助,寫 TypeScript 最麻煩的部分,AI 全部搞定了。
前幾個月,還算融洽,但 AI 寫的代碼,不看不知道,一看嚇一跳,可以說是垃圾屎山也不為過。
或許我們從整個專案的局部看,這 AI 寫的代碼還真他娘的 不錯,但如果你從整個專案的協調性,系統性,擴展性,維護性去看,AI 寫的就是一大坨屎山。
怎麼辦呢?有兩種辦法,第一種是眼不見為淨,還有一種就是重構它。
重構也有兩種方法,用 AI 去重構 AI,或者古法手工重構。
我都試過,實踐證明,AI 重構後的屎山,還是屎山。
或許是我對 AI 的提示詞,對 AI 提供的代碼規範不夠細節,說得不夠清楚,但要真讓我一五一十,事無巨細的說清楚,那跟我古法手工重構有啥區別?
所以最終還是回到了,古法手工重構的地步。
這個時候,才真正明白了,什麼是一個頭,兩個大。
換做寫 JavaScript 的時候,我重構直接撸起袖子就是幹,但現在,我首先要梳理類型,然後讓代碼與類型進行完美結合,再反覆地在代碼和類型中進行各種穿插遊走。
重構了一段時間,卧槽,好累啊,我大部分時間都不是在寫功能,寫代碼,而是在跟類型鬥智鬥勇,因為我無法忍受 any,無法忍受 unknown,也無法忍受不嚴謹的類型。
原本應該很快就把功能寫完的,但至少 70%-80% 的時間,都在類型這個問題上面反覆橫跳,我 TM 到底是要寫代碼還是寫類型啊?
直到我徹底放棄 TypeScript 的那一刻,我才真正明白,我是一個一根筋的人,我不喜歡一個有類型系統的語言,它居然可以讓你不寫類型。
正是 TypeScript 這種,一邊要革了 JavaScript 的半條命,一邊又給 JavaScript 另外半條命一直吊鹽水,讓我這種強迫症特別抓狂。
回到 JavaScript 後,終於鬆了口氣,腰不酸,腿也不痛了,回想到很多年以前剛入行那會,所有網站都是 JavaScript 寫的,也不見有幾個捅破天的問題出現。
反而是 TypeScript 問世後,好像繼續用 JavaScript,整個專案,團隊,公司,市值都會天崩地裂一樣。
而 AI 的發展,就算用 JavaScript,出現問題的概率也會遠遠低於多年以前只有 JavaScript 的時代。
對於代碼而言,我現在更信任自己這個人肉編譯器,比如用戶對接口的傳參,每個數據的類型,大小,範圍,我都會有一個驗證函數進行專門的驗證。但如果用 TypeScript,你就要進行繁複的判斷,類型的定義,不然就會出現紅色波浪線。
那我把嚴格檢測關了不就行了嗎?那這樣我為什麼不直接用 JavaScript 一勞永逸呢?用 TypeScript 不就是貪它的類型系統嗎,但類型系統反而帶來了更多麻煩。
以上均為個人單打獨鬥的情況之思考與分享,不適合所有人,TypeScript 是一個非常好的程式語言,革命性的程式語言,但拋去濾鏡之後,從自身需求出發,其實很多人都不需要 TypeScript。
我是農村程式員,獨立開發者,前端之虎陳隨易,個人網站 👇
我的所有文章均為古法手寫,無 AI 添加劑,請放心食用,如果你覺得本文有用,一鍵三連 (讚、評論、轉發),就是對我最大的支持~