【问题标题】:typescript mutiple call signature for exported function导出函数的打字稿多重调用签名
【发布时间】:2012-11-13 02:41:53
【问题描述】:

我有以下代码:

module array {
  export function contains(arr: Array, item: any): bool { // implementation }
}

我想要的是联合类型(在上面的示例中,Array、NodeList 和 IArguments 应该是可能的)或导出函数的多个签名。我好像也做不到。

我尝试使用不同类型的参数多次声明函数,但编译器抱怨缺少 return 语句 - 没有必要证明仅用于参数类型检查的声明的实现(并且使代码冗长)。我认为拥有联合类型会更好,不是吗?

所以问题是:如果允许的参数是不同类型的函数(在这种情况下 - 类似对象的数组),但实现是相同的,我如何实现类型检查,而无需复制/粘贴实现(基本上一个简单的'return false'可能会在最后一个之前的声明中使用,但似乎仍然是个坏主意)。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您可以使用any 关键字来设置动态参数:

    export function contains(arr: any[], item: any): bool { // implementation }
    

    或者如果你知道你想要允许的类型,你可以重载函数:

    export function contains(arr: string[], item: string): bool;
    export function contains(arr: number[], item: number): bool;
    export function contains(arr: any[], item: any): bool { // implementation }
    

    我以stringnumber 为例——但你可以使用任何你喜欢的类型。我还假设如果你有一个字符串列表,你会寻找一个字符串项,但如果不是这样,你可以更改它。

    最终函数不可调用 - 您只能通过重载访问它。

    【讨论】:

    • 不幸的是,Visual Studio 不喜欢这个解决方案:它说:重载声明缺少定义。这是 VS 的问题还是解决方案的问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    相关资源
    最近更新 更多