TypeScript語言規范的6.3節討論了函數重載,并提供了有關如何實現此功能的具體示例。但是,如果我嘗試這樣的事情:export class LayerFactory { constructor (public styleFactory: Symbology.StyleFactory) { } createFeatureLayer (userContext : Model.UserContext, mapWrapperObj : MapWrapperBase) : any { throw "not implemented"; } createFeatureLayer(layerName : string, style : any) : any { throw "not implemented"; } }我收到一個編譯器錯誤,指示重復的標識符,即使函數參數的類型不同。即使我向第二個createFeatureLayer函數添加了一個附加參數,我仍然會遇到編譯器錯誤。請給我個主意。
3 回答

揚帆大魚
TA貢獻1799條經驗 獲得超9個贊
這可能是因為,當兩個函數都編譯為JavaScript時,它們的簽名是完全相同的。由于JavaScript沒有類型,我們最終創建了兩個帶有相同數量參數的函數。因此,TypeScript限制我們創建此類函數。
TypeScript支持基于參數數量的重載,但是如果將其與OO語言進行比較,則要遵循的步驟有些不同。在回答另一個SO問題時,有人用一個很好的例子來解釋它:方法重載?。
基本上,我們正在做的是,我們只創建一個函數和許多聲明,以使TypeScript不會產生編譯錯誤。當此代碼編譯為JavaScript時,將僅可見具體功能。由于可以通過傳遞多個參數來調用JavaScript函數,因此它可以正常工作。
添加回答
舉報
0/150
提交
取消