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 函数添加了一个附加参数,我仍然会收到编译器错误。想法,请。
这可能是因为,当两个函数都编译为 JavaScript 时,它们的签名完全相同。由于 JavaScript 没有类型,我们最终创建了两个接受相同数量参数的函数。因此,TypeScript 限制我们创建此类函数。
TypeScript 支持基于参数数量的重载,但是如果我们与 OO 语言相比,要遵循的步骤会有些不同。在回答另一个 SO 问题时,有人用一个很好的例子来解释它:方法重载?.
基本上,我们所做的是,我们只创建一个函数和许多声明,以便 TypeScript 不会产生编译错误。当这段代码被编译成 JavaScript 时,单独的具体函数将是可见的。由于可以通过传递多个参数来调用 JavaScript 函数,因此它可以正常工作。