打字函数的打字机多个调用签名

Pet*_*StJ 3 typescript

我有以下代码:

module array {
  export function contains(arr: Array, item: any): bool { // implementation }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Fen*_*ton 8

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

export function contains(arr: any[], item: any): bool { // implementation }
Run Code Online (Sandbox Code Playgroud)

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

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 }
Run Code Online (Sandbox Code Playgroud)

我曾经使用过stringnumber作为一个例子 - 但你可以使用你喜欢的任何类型.我还假设如果你有一个字符串列表,你将寻找一个字符串项,但如果不是这样你就可以改变它.

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