5

我有以下代码:

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

我希望能够拥有的是联合类型(在上面的示例中 Array、NodeList 和 IArguments 应该是可能的)或导出函数的多个签名。我似乎也做不到。

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

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

4

1 回答 1

10

您可以使用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 }

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

最后一个函数是不可调用的——你只能通过重载来访问它。

于 2012-11-25T15:52:09.337 回答