Skip to content

Commit d102ec0

Browse files
Better typings for promise.race based on conditional types (#31117)
Following the feature - Mapped tuple types #25947 - it is now possible to have better typings for Promise.race
1 parent 90d3acf commit d102ec0

File tree

1 file changed

+3
-67
lines changed

1 file changed

+3
-67
lines changed

src/lib/es2015.promise.d.ts

+3-67
Original file line numberDiff line numberDiff line change
@@ -98,79 +98,15 @@ interface PromiseConstructor {
9898
* @param values An array of Promises.
9999
* @returns A new Promise.
100100
*/
101-
race<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>, T10 | PromiseLike<T10>]): Promise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10>;
101+
race<T>(values: T[]): Promise<T extends PromiseLike<infer U> ? U : T>;
102102

103103
/**
104104
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
105105
* or rejected.
106-
* @param values An array of Promises.
107-
* @returns A new Promise.
108-
*/
109-
race<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>]): Promise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9>;
110-
111-
/**
112-
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
113-
* or rejected.
114-
* @param values An array of Promises.
115-
* @returns A new Promise.
116-
*/
117-
race<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>]): Promise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8>;
118-
119-
/**
120-
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
121-
* or rejected.
122-
* @param values An array of Promises.
123-
* @returns A new Promise.
124-
*/
125-
race<T1, T2, T3, T4, T5, T6, T7>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>]): Promise<T1 | T2 | T3 | T4 | T5 | T6 | T7>;
126-
127-
/**
128-
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
129-
* or rejected.
130-
* @param values An array of Promises.
131-
* @returns A new Promise.
132-
*/
133-
race<T1, T2, T3, T4, T5, T6>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>]): Promise<T1 | T2 | T3 | T4 | T5 | T6>;
134-
135-
/**
136-
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
137-
* or rejected.
138-
* @param values An array of Promises.
139-
* @returns A new Promise.
140-
*/
141-
race<T1, T2, T3, T4, T5>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>]): Promise<T1 | T2 | T3 | T4 | T5>;
142-
143-
/**
144-
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
145-
* or rejected.
146-
* @param values An array of Promises.
147-
* @returns A new Promise.
148-
*/
149-
race<T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>]): Promise<T1 | T2 | T3 | T4>;
150-
151-
/**
152-
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
153-
* or rejected.
154-
* @param values An array of Promises.
155-
* @returns A new Promise.
156-
*/
157-
race<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): Promise<T1 | T2 | T3>;
158-
159-
/**
160-
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
161-
* or rejected.
162-
* @param values An array of Promises.
163-
* @returns A new Promise.
164-
*/
165-
race<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): Promise<T1 | T2>;
166-
167-
/**
168-
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
169-
* or rejected.
170-
* @param values An array of Promises.
106+
* @param values An iterable of Promises.
171107
* @returns A new Promise.
172108
*/
173-
race<T>(values: (T | PromiseLike<T>)[]): Promise<T>;
109+
race<T>(values: Iterable<T>): Promise<T extends PromiseLike<infer U> ? U : T>;
174110

175111
/**
176112
* Creates a new rejected promise for the provided reason.

0 commit comments

Comments
 (0)