1313 *
1414 * If `$promiseOrValue` is a promise, it will be returned as is.
1515 *
16- * @param mixed $promiseOrValue
17- * @return PromiseInterface
16+ * @template-covariant T
17+ * @template TFulfilled as PromiseInterface<T>|T
18+ * @param TFulfilled $promiseOrValue
19+ * @return (TFulfilled is PromiseInterface ? TFulfilled : PromiseInterface<TFulfilled>)
1820 */
1921function resolve ($ promiseOrValue = null )
2022{
@@ -52,8 +54,10 @@ function resolve($promiseOrValue = null)
5254 * throwing an exception. For example, it allows you to propagate a rejection with
5355 * the value of another promise.
5456 *
55- * @param mixed $promiseOrValue
56- * @return PromiseInterface
57+ * @template T is null
58+ * @template R
59+ * @param R $promiseOrValue
60+ * @return PromiseInterface<T>
5761 */
5862function reject ($ promiseOrValue = null )
5963{
@@ -72,8 +76,9 @@ function reject($promiseOrValue = null)
7276 * will be an array containing the resolution values of each of the items in
7377 * `$promisesOrValues`.
7478 *
75- * @param array $promisesOrValues
76- * @return PromiseInterface
79+ * @template T
80+ * @param array<PromiseInterface<T>|T> $promisesOrValues
81+ * @return PromiseInterface<array<T>>
7782 */
7883function all ($ promisesOrValues )
7984{
@@ -89,8 +94,9 @@ function all($promisesOrValues)
8994 * The returned promise will become **infinitely pending** if `$promisesOrValues`
9095 * contains 0 items.
9196 *
92- * @param array $promisesOrValues
93- * @return PromiseInterface
97+ * @template T
98+ * @param array<PromiseInterface<T>|T> $promisesOrValues
99+ * @return PromiseInterface<T>
94100 */
95101function race ($ promisesOrValues )
96102{
@@ -126,8 +132,9 @@ function race($promisesOrValues)
126132 * The returned promise will also reject with a `React\Promise\Exception\LengthException`
127133 * if `$promisesOrValues` contains 0 items.
128134 *
129- * @param array $promisesOrValues
130- * @return PromiseInterface
135+ * @template T
136+ * @param array<PromiseInterface<T>|T> $promisesOrValues
137+ * @return PromiseInterface<T>
131138 */
132139function any ($ promisesOrValues )
133140{
@@ -151,9 +158,10 @@ function any($promisesOrValues)
151158 * The returned promise will also reject with a `React\Promise\Exception\LengthException`
152159 * if `$promisesOrValues` contains less items than `$howMany`.
153160 *
154- * @param array $promisesOrValues
161+ * @template T
162+ * @param array<PromiseInterface<T>|T> $promisesOrValues
155163 * @param int $howMany
156- * @return PromiseInterface
164+ * @return PromiseInterface<array<T>>
157165 */
158166function some ($ promisesOrValues , $ howMany )
159167{
@@ -228,9 +236,11 @@ function some($promisesOrValues, $howMany)
228236 * The map function receives each item as argument, where item is a fully resolved
229237 * value of a promise or value in `$promisesOrValues`.
230238 *
231- * @param array $promisesOrValues
232- * @param callable $mapFunc
233- * @return PromiseInterface
239+ * @template-covariant T
240+ * @template TFulfilled as PromiseInterface<T>|T
241+ * @param array<PromiseInterface<T>|T> $promisesOrValues
242+ * @param callable(T): TFulfilled $mapFunc
243+ * @return PromiseInterface<array<T>>
234244 */
235245function map ($ promisesOrValues , callable $ mapFunc )
236246{
@@ -276,10 +286,11 @@ function ($mapped) use ($i, &$values, &$toResolve, $resolve) {
276286 * promise, *and* `$initialValue` may be a promise or a value for the starting
277287 * value.
278288 *
279- * @param array $promisesOrValues
280- * @param callable $reduceFunc
289+ * @template T
290+ * @param array<PromiseInterface<T>|T> $promisesOrValues
291+ * @param callable(T): bool $reduceFunc
281292 * @param mixed $initialValue
282- * @return PromiseInterface
293+ * @return PromiseInterface<array<T>>
283294 */
284295function reduce ($ promisesOrValues , callable $ reduceFunc , $ initialValue = null )
285296{
0 commit comments