Skip to content

Commit b8a9fd1

Browse files
committed
Use conditional type inference for promise resolution
This improves the quality of the type resolution for promise constructor methods, as using conditional type inference is distributive, whereas the inference provided by arguments is not. Alternatively, the arguments based inference could be improved, but that would be a completely different kind of change.
1 parent 5d3685d commit b8a9fd1

File tree

1 file changed

+22
-22
lines changed

1 file changed

+22
-22
lines changed

lib/lib.es2015.promise.d.ts

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,167 +30,167 @@ interface PromiseConstructor {
3030
* a resolve callback used to resolve the promise with a value or the result of another promise,
3131
* and a reject callback used to reject the promise with a provided reason or error.
3232
*/
33-
new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void): Promise<T>;
33+
new <T>(executor: (resolve: (value?: T) => void, reject: (reason?: any) => void) => void): Promise<ResolveType<T>>;
3434

3535
/**
3636
* Creates a Promise that is resolved with an array of results when all of the provided Promises
3737
* resolve, or rejected when any Promise is rejected.
3838
* @param values An array of Promises.
3939
* @returns A new Promise.
4040
*/
41-
all<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]>;
41+
all<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]): Promise<[ResolveType<T1>, ResolveType<T2>, ResolveType<T3>, ResolveType<T4>, ResolveType<T5>, ResolveType<T6>, ResolveType<T7>, ResolveType<T8>, ResolveType<T9>, ResolveType<T10>]>;
4242

4343
/**
4444
* Creates a Promise that is resolved with an array of results when all of the provided Promises
4545
* resolve, or rejected when any Promise is rejected.
4646
* @param values An array of Promises.
4747
* @returns A new Promise.
4848
*/
49-
all<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]>;
49+
all<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1, T2, T3, T4, T5, T6, T7, T8, T9]): Promise<[ResolveType<T1>, ResolveType<T2>, ResolveType<T3>, ResolveType<T4>, ResolveType<T5>, ResolveType<T6>, ResolveType<T7>, ResolveType<T8>, ResolveType<T9>]>;
5050

5151
/**
5252
* Creates a Promise that is resolved with an array of results when all of the provided Promises
5353
* resolve, or rejected when any Promise is rejected.
5454
* @param values An array of Promises.
5555
* @returns A new Promise.
5656
*/
57-
all<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]>;
57+
all<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1, T2, T3, T4, T5, T6, T7, T8]): Promise<[ResolveType<T1>, ResolveType<T2>, ResolveType<T3>, ResolveType<T4>, ResolveType<T5>, ResolveType<T6>, ResolveType<T7>, ResolveType<T8>]>;
5858

5959
/**
6060
* Creates a Promise that is resolved with an array of results when all of the provided Promises
6161
* resolve, or rejected when any Promise is rejected.
6262
* @param values An array of Promises.
6363
* @returns A new Promise.
6464
*/
65-
all<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]>;
65+
all<T1, T2, T3, T4, T5, T6, T7>(values: [T1, T2, T3, T4, T5, T6, T7]): Promise<[ResolveType<T1>, ResolveType<T2>, ResolveType<T3>, ResolveType<T4>, ResolveType<T5>, ResolveType<T6>, ResolveType<T7>]>;
6666

6767
/**
6868
* Creates a Promise that is resolved with an array of results when all of the provided Promises
6969
* resolve, or rejected when any Promise is rejected.
7070
* @param values An array of Promises.
7171
* @returns A new Promise.
7272
*/
73-
all<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]>;
73+
all<T1, T2, T3, T4, T5, T6>(values: [T1, T2, T3, T4, T5, T6]): Promise<[ResolveType<T1>, ResolveType<T2>, ResolveType<T3>, ResolveType<T4>, ResolveType<T5>, ResolveType<T6>]>;
7474

7575
/**
7676
* Creates a Promise that is resolved with an array of results when all of the provided Promises
7777
* resolve, or rejected when any Promise is rejected.
7878
* @param values An array of Promises.
7979
* @returns A new Promise.
8080
*/
81-
all<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]>;
81+
all<T1, T2, T3, T4, T5>(values: [T1, T2, T3, T4, T5]): Promise<[ResolveType<T1>, ResolveType<T2>, ResolveType<T3>, ResolveType<T4>, ResolveType<T5>]>;
8282

8383
/**
8484
* Creates a Promise that is resolved with an array of results when all of the provided Promises
8585
* resolve, or rejected when any Promise is rejected.
8686
* @param values An array of Promises.
8787
* @returns A new Promise.
8888
*/
89-
all<T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>]): Promise<[T1, T2, T3, T4]>;
89+
all<T1, T2, T3, T4>(values: [T1, T2, T3, T4]): Promise<[ResolveType<T1>, ResolveType<T2>, ResolveType<T3>, ResolveType<T4>]>;
9090

9191
/**
9292
* Creates a Promise that is resolved with an array of results when all of the provided Promises
9393
* resolve, or rejected when any Promise is rejected.
9494
* @param values An array of Promises.
9595
* @returns A new Promise.
9696
*/
97-
all<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): Promise<[T1, T2, T3]>;
97+
all<T1, T2, T3>(values: [T1, T2, T3]): Promise<[ResolveType<T1>, ResolveType<T2>, ResolveType<T3>]>;
9898

9999
/**
100100
* Creates a Promise that is resolved with an array of results when all of the provided Promises
101101
* resolve, or rejected when any Promise is rejected.
102102
* @param values An array of Promises.
103103
* @returns A new Promise.
104104
*/
105-
all<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): Promise<[T1, T2]>;
105+
all<T1, T2>(values: [T1, T2]): Promise<[ResolveType<T1>, ResolveType<T2>]>;
106106

107107
/**
108108
* Creates a Promise that is resolved with an array of results when all of the provided Promises
109109
* resolve, or rejected when any Promise is rejected.
110110
* @param values An array of Promises.
111111
* @returns A new Promise.
112112
*/
113-
all<T>(values: (T | PromiseLike<T>)[]): Promise<T[]>;
113+
all<T>(values: ReadonlyArray<T>): Promise<ResolveType<T>[]>;
114114

115115
/**
116116
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
117117
* or rejected.
118118
* @param values An array of Promises.
119119
* @returns A new Promise.
120120
*/
121-
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>;
121+
race<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]): Promise<ResolveType<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10>>;
122122

123123
/**
124124
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
125125
* or rejected.
126126
* @param values An array of Promises.
127127
* @returns A new Promise.
128128
*/
129-
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>;
129+
race<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1, T2, T3, T4, T5, T6, T7, T8, T9]): Promise<ResolveType<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9>>;
130130

131131
/**
132132
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
133133
* or rejected.
134134
* @param values An array of Promises.
135135
* @returns A new Promise.
136136
*/
137-
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>;
137+
race<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1, T2, T3, T4, T5, T6, T7, T8]): Promise<ResolveType<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8>>;
138138

139139
/**
140140
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
141141
* or rejected.
142142
* @param values An array of Promises.
143143
* @returns A new Promise.
144144
*/
145-
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>;
145+
race<T1, T2, T3, T4, T5, T6, T7>(values: [T1, T2, T3, T4, T5, T6, T7]): Promise<ResolveType<T1 | T2 | T3 | T4 | T5 | T6 | T7>>;
146146

147147
/**
148148
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
149149
* or rejected.
150150
* @param values An array of Promises.
151151
* @returns A new Promise.
152152
*/
153-
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>;
153+
race<T1, T2, T3, T4, T5, T6>(values: [T1, T2, T3, T4, T5, T6]): Promise<ResolveType<T1 | T2 | T3 | T4 | T5 | T6>>;
154154

155155
/**
156156
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
157157
* or rejected.
158158
* @param values An array of Promises.
159159
* @returns A new Promise.
160160
*/
161-
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>;
161+
race<T1, T2, T3, T4, T5>(values: [T1, T2, T3, T4, T5]): Promise<ResolveType<T1 | T2 | T3 | T4 | T5>>;
162162

163163
/**
164164
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
165165
* or rejected.
166166
* @param values An array of Promises.
167167
* @returns A new Promise.
168168
*/
169-
race<T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>]): Promise<T1 | T2 | T3 | T4>;
169+
race<T1, T2, T3, T4>(values: [T1, T2, T3, T4]): Promise<ResolveType<T1 | T2 | T3 | T4>>;
170170

171171
/**
172172
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
173173
* or rejected.
174174
* @param values An array of Promises.
175175
* @returns A new Promise.
176176
*/
177-
race<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): Promise<T1 | T2 | T3>;
177+
race<T1, T2, T3>(values: [T1, T2, T3]): Promise<ResolveType<T1 | T2 | T3>>;
178178

179179
/**
180180
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
181181
* or rejected.
182182
* @param values An array of Promises.
183183
* @returns A new Promise.
184184
*/
185-
race<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): Promise<T1 | T2>;
185+
race<T1, T2>(values: [T1, T2]): Promise<ResolveType<T1 | T2>>;
186186

187187
/**
188188
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved
189189
* or rejected.
190190
* @param values An array of Promises.
191191
* @returns A new Promise.
192192
*/
193-
race<T>(values: (T | PromiseLike<T>)[]): Promise<T>;
193+
race<T>(values: ReadonlyArray<T>): Promise<ResolveType<T>>;
194194

195195
/**
196196
* Creates a new rejected promise for the provided reason.
@@ -204,7 +204,7 @@ interface PromiseConstructor {
204204
* @param value A promise.
205205
* @returns A promise whose internal state matches the provided promise.
206206
*/
207-
resolve<T>(value: T | PromiseLike<T>): Promise<T>;
207+
resolve<T>(value: T): Promise<ResolveType<T>>;
208208

209209
/**
210210
* Creates a new resolved promise .

0 commit comments

Comments
 (0)