能用js重寫的都會被typescript重寫
導語: TypeScript從今天數以百萬計的JavaScript開發者所熟悉的語法和語義開始。使用現有的JavaScript程式碼,包括流行的JavaScript庫,並從JavaScript程式碼中呼叫TypeScript程式碼
能被js重寫的中獎被typescript重寫
沒用過typescript可能會下面的兩個疑問:
-
javascript越來越完善,還有沒有必要學習typescript?
-
typescript學習的成本如何呢?
1. typescript的生態
針對這兩個疑問我們來稍微地解答下:
typescript是javascript的超集,所有es2016, es2017, es2018等等,包括未來的標準就會被包含在typescript中:
尤其在多人合作的專案中,typescript能強制開發者的標準,對其他的開發者能天然的做到文件提示的功能,例如這段程式碼:
/** * 判斷當前商品的狀態 * qcoin/object/redpack/flow型別的商品裡,1表示待領取,2表示已領取; * code,url等型別的商品,會直接進行傳送,1就表示已領取,沒有狀態2 * 統一後:state: 0:未成功, 1:待領取, 2:已領取, 3:已過期, 4:已下架 * * @param state 當前商品的狀態 * @param type qcoin(QB), object(實物), code(兌換碼), url(純連結), redpack(現金紅包), flow(流量型) */ const getOrderState = (state: number, type: string): number => { if (state === 1 && (type === 'code' || type === 'url')) { return 2; } return state; };
在呼叫 getOrderState
方法時,能直接提示該方法有幾個引數,每個引數的型別是什麼,返回的資料是什麼型別的,如果錯誤地呼叫了該方法,則在編寫階段就會提示出來!
同時通過Google的搜尋量上來看,大概有1850萬的搜尋結果,typescript的生態是越來越好。
而且,typescript對angular和react有著優良的支援,在使用react編寫程式碼的過程中,同時尤雨溪也在用typescript對Vue3.0進行重寫。之前尤雨溪也在知乎上說壓flow壓錯了寶,typescript真香 https://www.zhihu.com/question/310485097/answer/591869966 。
2. typescript的學習成本
typescript的學習非常的低,針對一些平常的操作,隨手就可以寫上相應的型別。
function sum(a: number, b:number): number { return a + b; } sum(23, 56);
針對比較複雜的資料型別,可以通過 interface
來實現:
interface GoodsItem { cost: number; // 現價 cover: string; // 圖片 customer_service: string; // 規則 desc: string; // 描述 discount_score: number; // 積分價格 icon_url: string; // icon prize_enname: string; prize_zhname: string; rule: string[] | string; // 規則名 score_cost: number; // 積分兌換的價格 sending_count_today: number; // 今日發放的上限 sending_count_total: number; // 總量 short_name: string; // 短名稱 sort: number; // 權重 state: number; // 狀態 type: string; // 型別 validity: string; // 有效期 } let goods: GoodsItem; // 使用GoodsItem來定義goods變數
當然,對一些更加複雜的,比如泛型等則需要特意地學習下。這裡可以看下知乎上總結的 typescript騷操作 。
3. 總結
最開始寫頁面時,使用的是Vue,那時候就是純按照教程上的方式來編寫的,例如data, computed, watch等方法。在後來的專案中,使用 vue-property-decorator
來進行實現,雖然對於預設的物件書寫方式有型別推導支援,但裡面的實現繞了很多彎。問題的本質其實很簡單:因為當初 API 的設計根本就沒有考慮型別系統,Vue2.x對typescript支援的非常不好,我們也期待Vue3.0出現的變更。最近改用react寫新的專案時,typescript發揮它很大的優勢,型別提醒、資料提示(如dom物件下的方法)等,支援地都特別棒.
自從接觸了typescript,總想著把之前所有用javascript實現的程式碼再用typescript重構一下。但是,歷史程式碼能不動還是別動了,在以後新的專案中好好使用typescript即可!