有只小跳蛙
2019-12-11 13:09:26
TypeScript語言規(guī)范的6.3節(jié)討論了函數(shù)重載,并提供了有關(guān)如何實(shí)現(xiàn)此功能的具體示例。但是,如果我嘗試這樣的事情: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"; } }我收到一個(gè)編譯器錯(cuò)誤,指示重復(fù)的標(biāo)識(shí)符,即使函數(shù)參數(shù)的類型不同。即使我向第二個(gè)createFeatureLayer函數(shù)添加了一個(gè)附加參數(shù),我仍然會(huì)遇到編譯器錯(cuò)誤。請(qǐng)給我個(gè)主意。
3 回答

斯蒂芬大帝
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
這可能是因?yàn)?,?dāng)兩個(gè)函數(shù)都編譯為JavaScript時(shí),它們的簽名是完全相同的。由于JavaScript沒有類型,我們最終創(chuàng)建了兩個(gè)帶有相同數(shù)量參數(shù)的函數(shù)。因此,TypeScript限制我們創(chuàng)建此類函數(shù)。
TypeScript支持基于參數(shù)數(shù)量的重載,但是如果將其與OO語言進(jìn)行比較,則要遵循的步驟有些不同。在回答另一個(gè)SO問題時(shí),有人用一個(gè)很好的例子來解釋它:方法重載?。
基本上,我們正在做的是,我們只創(chuàng)建一個(gè)函數(shù)和許多聲明,以使TypeScript不會(huì)產(chǎn)生編譯錯(cuò)誤。當(dāng)此代碼編譯為JavaScript時(shí),將僅可見具體功能。由于可以通過傳遞多個(gè)參數(shù)來調(diào)用JavaScript函數(shù),因此它可以正常工作。
添加回答
舉報(bào)
0/150
提交
取消