小编典典

TypeScript 函数重载

all

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


阅读 94

收藏
2022-04-04

共1个答案

小编典典

这可能是因为,当两个函数都编译为 JavaScript 时,它们的签名完全相同。由于 JavaScript
没有类型,我们最终创建了两个接受相同数量参数的函数。因此,TypeScript 限制我们创建此类函数。

TypeScript 支持基于参数数量的重载,但是如果我们与 OO 语言相比,要遵循的步骤会有些不同。在回答另一个 SO
问题时,有人用一个很好的例子来解释它:方法重载?.

基本上,我们所做的是,我们只创建一个函数和许多声明,以便 TypeScript 不会产生编译错误。当这段代码被编译成 JavaScript
时,单独的具体函数将是可见的。由于可以通过传递多个参数来调用 JavaScript 函数,因此它可以正常工作。

2022-04-04