我有以下代码:
module array {
export function contains(arr: Array, item: any): bool { // implementation }
}
我希望能够拥有的是union类型(在上面的示例中,可能是Node,NodeList和IArguments)或导出函数的多个签名。我似乎无法做到。
我尝试使用不同的参数类型多次声明该函数,但编译器抱怨缺少return语句 - 没有证据证明只用于参数类型检查的声明的实现(并且使得代码详细)。我认为更好的方法是拥有联合类型,不是吗?
所以问题是:如何对允许的参数属于不同类型的函数(在这种情况下 - 类似于对象的数组)中实现类型检查,但实现是相同的,无需复制/粘贴实现(基本上一个简单的'return false'可能会在最后一个之前的声明中做,但看起来仍然是一个坏主意。)
答案 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 }
我使用string
和number
作为示例 - 但您可以使用您喜欢的任何类型。我还假设如果你有一个字符串列表,你将寻找一个字符串项,但如果不是这样你就可以改变它。
最终函数不可调用 - 您只能通过重载访问它。