TypeScript语言规范的第6.3节讨论了函数重载,并给出了如何实现这一点的具体示例.但是如果我try 这样的方法:

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问题时,有人用一个很好的例子来解释:Method overloading?.

基本上,我们正在做的是,我们只创建一个函数和多个声明,这样TypeScript就不会出现编译错误.当这段代码被编译成JavaScript时,具体的函数就可以看到了.由于可以通过传递多个参数来调用JavaScript函数,因此它可以正常工作.

Typescript相关问答推荐

类型ElementTypes不可分配给类型ElementTypes.word'

为什么仅对对象而不对简单类型需要满足?

在OpenLayers 9.1中使用内置方法时,TypScript缩小联合类型

如何将单元测试中的私有订阅变量设置为空(或未定义)?

TypScript中的算法运算式

脉轮ui打字脚本强制执行图标按钮的咏叹调标签-如何关闭

相同端点具有不同响应时的RTKQuery类型定义

了解TS类型参数列表中的分配

将对象属性转换为InstanceType或原样的强类型方法

类型脚本类型字段组合

如何在Typescript 中输入两个相互关联的变量?

具有泛型类型和缺省值的键

仅针对某些状态代码重试HTTP请求

如何在编译时为不带常量的参数引发错误

在实现自定义主题后,Angular 不会更新视图

如何将类似数组的对象(字符串::匹配结果)转换为类型脚本中的数组?

如何扩展RxJS?

组件使用forwardRef类型脚本时传递props

数据库中的表请求返回如下日期:2023-07-20T21:39:00.000Z 我需要将此数据格式化为 dd/MM/yyyy HH:mm

带有过滤键的 Typescript 映射类型