typescript用于导出函数的多个调用签名

时间:2012-11-25 12:28:08

标签: typescript

我有以下代码:

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

我希望能够拥有的是union类型(在上面的示例中,可能是Node,NodeList和IArguments)或导出函数的多个签名。我似乎无法做到。

我尝试使用不同的参数类型多次声明该函数,但编译器抱怨缺少return语句 - 没有证据证明只用于参数类型检查的声明的实现(并且使得代码详细)。我认为更好的方法是拥有联合类型,不是吗?

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

1 个答案:

答案 0 :(得分:7)

您可以使用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作为示例 - 但您可以使用您喜欢的任何类型。我还假设如果你有一个字符串列表,你将寻找一个字符串项,但如果不是这样你就可以改变它。

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