1. ホーム
  2. typescript

[解決済み] 引数数が変化する関数に対するTypeScriptのタイプシグネチャ

2022-06-06 17:01:31

質問

可変長の引数を受け取る関数のメンバを持つインターフェースの定義に困っています。次のオブジェクト リテラルを例にとって考えてみましょう。

var obj = {
    func: () => {
        for(var i = 0; i < arguments.length; i++) {
            console.log(arguments[i]);
        }
    }
};

というようなインターフェースを定義できるようにしたい。

interface IExample {
    func: ( ??? ) => void;
}

以下のコードがエラーにならずにコンパイルできるように。

var test = (o: IExample) {
    o.func("a");
    o.func("a", "b");
    o.func("a", "b", "c");
    ...
}

どのように解決するのですか?

TypeScriptはECMAScript 6の普及提案を利用しています。

http://wiki.ecmascript.org/doku.php?id=harmony:spread

が、型アノテーションを追加しているので、これは次のようになります。

interface Example {
    func(...args: any[]): void;
}