猿问

TypeScript函数重载

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函数添加了一个附加参数,我仍然会遇到编译器错误。请给我个主意。


有只小跳蛙
浏览 598回答 3
3回答

斯蒂芬大帝

这可能是因为,当两个函数都编译为JavaScript时,它们的签名是完全相同的。由于JavaScript没有类型,我们最终创建了两个带有相同数量参数的函数。因此,TypeScript限制我们创建此类函数。TypeScript支持基于参数数量的重载,但是如果将其与OO语言进行比较,则要遵循的步骤有些不同。在回答另一个SO问题时,有人用一个很好的例子来解释它:方法重载?。基本上,我们正在做的是,我们只创建一个函数和许多声明,以使TypeScript不会产生编译错误。当此代码编译为JavaScript时,将仅可见具体功能。由于可以通过传递多个参数来调用JavaScript函数,因此它可以正常工作。
随时随地看视频慕课网APP
我要回答