TypeScript 高級語法——函數(shù)重載
2023-07-24 15:58 作者:沒用軟件開發(fā)日記 | 我要投稿

????函數(shù)重載是服務(wù)端常用的編程手段,可以用不同的函數(shù)簽名表達函數(shù)在不同情況下的使用方式,與服務(wù)端不同的是TS的函數(shù)重載多個函數(shù)簽名要對應(yīng)同一個函數(shù)體,引用官方文檔的一個示例:
????在這個例子中演示了函數(shù)重載的寫法,最難讓人理解的可能是最后一個makeDate,其實在TS的函數(shù)重載中可以使用的僅僅是像前兩個函數(shù)那樣只存在必傳參數(shù)的函數(shù),但是為什么還要有第三種形式的粘合劑的存在呢?因為第二種函數(shù)簽名無法做到兼容第一種。
????在ES規(guī)范的范圍內(nèi)其實是不存在函數(shù)重載的,函數(shù)重載只是TS提供的一種編譯期強化能力,也就是上例表達的其實是一個“能接受一個參數(shù)或者三個參數(shù)的函數(shù)”,這是常規(guī)JS語法所無法做到的,第三種函數(shù)簽名出現(xiàn)的意義也僅在給第二種簽名一種邏輯能適配第一種簽名,讓這個函數(shù)變得合理(因為不存在既是一個必填參數(shù)又是三個必填參數(shù),所以需要一個兼容簽名將后兩個參數(shù)標(biāo)記為可選)。
?? ?函數(shù)重載的意義實際上是在編碼層面上明確的告訴使用者該函數(shù)有多少種使用方法。對于上例來講,傳入一個參數(shù)時意味著傳入的是時間戳字符串;傳入三個參數(shù)時證明傳入的是月、日、年數(shù)字。這樣我們就可以避免像曾經(jīng)需要去閱讀代碼邏輯才能知道這個函數(shù)的一堆參數(shù)應(yīng)該如何使用。