1717 *
1818 * If `$promiseOrValue` is a promise, it will be returned as is.
1919 *
20- * @param mixed $promiseOrValue
21- * @return PromiseInterface
20+ * @template T
21+ * @param PromiseInterface<T>|T $promiseOrValue
22+ * @return PromiseInterface<T>
2223 */
2324function resolve ($ promiseOrValue ): PromiseInterface
2425{
@@ -31,6 +32,7 @@ function resolve($promiseOrValue): PromiseInterface
3132
3233 if (\method_exists ($ promiseOrValue , 'cancel ' )) {
3334 $ canceller = [$ promiseOrValue , 'cancel ' ];
35+ assert (\is_callable ($ canceller ));
3436 }
3537
3638 return new Promise (function ($ resolve , $ reject ) use ($ promiseOrValue ): void {
@@ -54,8 +56,7 @@ function resolve($promiseOrValue): PromiseInterface
5456 * throwing an exception. For example, it allows you to propagate a rejection with
5557 * the value of another promise.
5658 *
57- * @param \Throwable $reason
58- * @return PromiseInterface
59+ * @return PromiseInterface<never>
5960 */
6061function reject (\Throwable $ reason ): PromiseInterface
6162{
@@ -68,8 +69,9 @@ function reject(\Throwable $reason): PromiseInterface
6869 * will be an array containing the resolution values of each of the items in
6970 * `$promisesOrValues`.
7071 *
71- * @param iterable<mixed> $promisesOrValues
72- * @return PromiseInterface
72+ * @template T
73+ * @param iterable<PromiseInterface<T>|T> $promisesOrValues
74+ * @return PromiseInterface<array<T>>
7375 */
7476function all (iterable $ promisesOrValues ): PromiseInterface
7577{
@@ -119,14 +121,15 @@ function (\Throwable $reason) use (&$continue, $reject): void {
119121 * The returned promise will become **infinitely pending** if `$promisesOrValues`
120122 * contains 0 items.
121123 *
122- * @param iterable<mixed> $promisesOrValues
123- * @return PromiseInterface
124+ * @template T
125+ * @param iterable<PromiseInterface<T>|T> $promisesOrValues
126+ * @return PromiseInterface<T>
124127 */
125128function race (iterable $ promisesOrValues ): PromiseInterface
126129{
127130 $ cancellationQueue = new Internal \CancellationQueue ();
128131
129- return new Promise (function ($ resolve , $ reject ) use ($ promisesOrValues , $ cancellationQueue ): void {
132+ return new Promise (function (callable $ resolve , callable $ reject ) use ($ promisesOrValues , $ cancellationQueue ): void {
130133 $ continue = true ;
131134
132135 foreach ($ promisesOrValues as $ promiseOrValue ) {
@@ -154,8 +157,9 @@ function race(iterable $promisesOrValues): PromiseInterface
154157 * The returned promise will also reject with a `React\Promise\Exception\LengthException`
155158 * if `$promisesOrValues` contains 0 items.
156159 *
157- * @param iterable<mixed> $promisesOrValues
158- * @return PromiseInterface
160+ * @template T
161+ * @param iterable<PromiseInterface<T>|T> $promisesOrValues
162+ * @return PromiseInterface<T>
159163 */
160164function any (iterable $ promisesOrValues ): PromiseInterface
161165{
0 commit comments