0
に(AngularJS IQServiceから簡略化)として宣言されている方法を検討:
all<T1, T2>(values: [IPromise<T1>, IPromise<T2>]): IPromise<[T1, T2]>;
をそれは最初の項目はIPromise<T1>
と2番目の項目IPromise<T2>
ある配列をとります。この宣言を使用する場合、私は何とか私はこのように、このメソッドを使用することができないこと、驚いた:
var promises = [a(), b()];
$q.all(promises).then(/*...*/);
> TS2329 Index signature is missing in type '(IPromise<A> | IPromise<B>)[]'
これが正常に動作している間:
$q.all([a(), b()]).then(/*...*/);
私はが(A|B)[]
としてのpを作成することを、理解しています。私の質問は、そのような場合[A, B]
に(A|B)[]
を適合させる最良の方法は何ですか。だから、どのように私は明示的にa()
とb()
の種類を参照することなく、これを修正することができますが、$q.all
var promises: [???] = [a(), b()];
$q.all(promises).then(/*...*/);
もちろん、それは私が「a()とb()の型を明示的に参照せずに」と言ったときに意味するものです – hansmaad
ああ、私は見て、申し訳ありません。その場合は、簡単なヘルパー関数を作成することをお勧めします。私は他の方法を見ることはできません。その答えを更新しました。 –
問題はありません)私は[ここ](https://github.com/Microsoft/TypeScript/issues/9216)の問題を提出し、まったく同じ回避策を得ました:)タプルリテラル[ここ](https ://github.com/Microsoft/TypeScript/issues/9217) – hansmaad