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 }

私は例として使用stringnumberましたが、好きなタイプを使用できます。また、文字列のリストがある場合は文字列アイテムを探していると思いましたが、そうでない場合は変更できます。

最後の関数は呼び出し可能ではありません-オーバーロードを介してのみアクセスできます。

于 2012-11-25T15:52:09.337 に答える