39

headjsは、そのAPIに対して非常にクレイジーなJavaScriptタイプの処理を実行します。たとえば、関数には任意の数の文字列(文字列配列ではない)が必要です。同じ関数呼び出しを終了する場合もあります。たとえば、オプションで関数で終了できます。

head.js("scripturl1", "scripturl2",...,callback);

次のことも(同じように簡単に)行うことができます

head.js({scriptlabel:"scripturl1"},{scriptlabel2:"scripturl2"},...., callback);

私の質問は、宣言ファイルでそれをどのように説明するのかということです。私の現在のパスは完全に間違っているように見えるので、私はここですべての耳です。

4

3 に答える 3

64

TS言語仕様では、変数番号/スプレッドパラメーターを「RESTパラメーター」と呼んでいます。残りのパラメーターを受け入れる関数シグニチャーを持つインターフェースの例:

interface IExample {
    fn : (...args : any[]) => any;
}

var x : IExample = {
    fn: function(...args : any[]) {
        for (var i = 0, arg; arg = args[i]; i++) {
            console.log(arg);
        }
    }
}

x.fn(1);
x.fn(1, 2);
x.fn("cat", "dog", "mouse");

残念ながら、いくつかの制限があります。「RESTパラメーター」は、関数のシグニチャーの最後のパラメーターである必要があります。そのため、コールバックパラメーターのタイプは、繰り返しパラメーターの後にあるため、キャプチャできません。

そうでなければ、次のようなことができたでしょう。

var fn = function(cb: Function, ...args : string[]) {
    ...
}
于 2012-10-16T04:12:12.210 に答える
1

あなたは次のようなことをすることができます:

type Action<T extends any[]> = (...args: T) => void
于 2021-02-12T16:31:43.893 に答える
-5

宣言は単純です:

function foo () { //...

Javascriptの関数宣言の関数引数の部分は単なる助言です。関数を呼び出す場合、Javascriptを使用すると、宣言された数より少ない引数(デフォルトではに渡されない引数undefined)または宣言された数より多い引数で呼び出すことができます。

関数が呼び出されると、argumentsオブジェクトが作成されます。引数オブジェクトは、渡された各引数を保持する配列に少し似ています(ただし、適切な配列オブジェクトではありません)。

したがって、たとえば、無限の引数を処理するには、次のようにするだけです。

function foo () {
  for (var n=0; n<arguments.length; n++) {
    alert(arguments[n]);
  }
}

だから今あなたは次fooのように呼び出すことができます:

foo(1,2,3);
foo(1,2,3,4,5,6,7,8);

それを超えて、どのタイプの引数が渡されたかを検出し、それに応じてそれらを処理するために、 typeofitstanceofなどを使用するだけの問題です。

于 2012-10-16T03:30:06.100 に答える