Skip to content

Commit 915863f

Browse files
committed
Fix issue with Awaited affecting jQuery, additional tests
1 parent ff6fac5 commit 915863f

13 files changed

+1353
-8
lines changed

src/lib/es5.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1500,8 +1500,8 @@ interface Promise<T> {
15001500
*/
15011501
type Awaited<T> =
15021502
T extends null | undefined ? T : // special case for `null | undefined` when not in `--strictNullChecks` mode
1503-
T extends object & { then(onfulfilled: infer F): any } ? // `await` only unwraps object types with a callable `then`. Non-object types are not unwrapped
1504-
F extends ((value: infer V, ...args: any) => any) ? // if the argument to `then` is callable, extracts the first argument
1503+
T extends object & { then(onfulfilled: infer F, ...args: infer _): any } ? // `await` only unwraps object types with a callable `then`. Non-object types are not unwrapped
1504+
F extends ((value: infer V, ...args: infer _) => any) ? // if the argument to `then` is callable, extracts the first argument
15051505
Awaited<V> : // recursively unwrap the value
15061506
never : // the argument to `then` was not callable
15071507
T; // non-object or non-thenable

tests/baselines/reference/asyncFunctionReturnType.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,7 @@ async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends
7373

7474
async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K]> {
7575
return Promise.resolve<TObj[K]>(obj[key]);
76-
}
77-
76+
}
7877

7978
//// [asyncFunctionReturnType.js]
8079
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

tests/baselines/reference/asyncFunctionReturnType.symbols

-1
Original file line numberDiff line numberDiff line change
@@ -285,4 +285,3 @@ async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K
285285
>obj : Symbol(obj, Decl(asyncFunctionReturnType.ts, 72, 100))
286286
>key : Symbol(key, Decl(asyncFunctionReturnType.ts, 72, 110))
287287
}
288-

tests/baselines/reference/asyncFunctionReturnType.types

-1
Original file line numberDiff line numberDiff line change
@@ -220,4 +220,3 @@ async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K
220220
>obj : TObj
221221
>key : K
222222
}
223-
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
//// [awaitedTypeJQuery.ts]
2+
/// <reference lib="dom" />
3+
4+
interface Thenable<T> extends PromiseLike<T> { }
5+
6+
// JQuery's Promise type
7+
interface PromiseBase<TR, TJ, TN,
8+
UR, UJ, UN,
9+
VR, VJ, VN,
10+
SR, SJ, SN> {
11+
then<ARD = never, AJD = never, AND = never,
12+
BRD = never, BJD = never, BND = never,
13+
CRD = never, CJD = never, CND = never,
14+
RRD = never, RJD = never, RND = never,
15+
ARF = never, AJF = never, ANF = never,
16+
BRF = never, BJF = never, BNF = never,
17+
CRF = never, CJF = never, CNF = never,
18+
RRF = never, RJF = never, RNF = never,
19+
ARP = never, AJP = never, ANP = never,
20+
BRP = never, BJP = never, BNP = never,
21+
CRP = never, CJP = never, CNP = never,
22+
RRP = never, RJP = never, RNP = never>(
23+
doneFilter: (t: TR, u: UR, v: VR, ...s: SR[]) => PromiseBase<ARD, AJD, AND,
24+
BRD, BJD, BND,
25+
CRD, CJD, CND,
26+
RRD, RJD, RND> | Thenable<ARD> | ARD,
27+
failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => PromiseBase<ARF, AJF, ANF,
28+
BRF, BJF, BNF,
29+
CRF, CJF, CNF,
30+
RRF, RJF, RNF> | Thenable<ARF> | ARF,
31+
progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => PromiseBase<ARP, AJP, ANP,
32+
BRP, BJP, BNP,
33+
CRP, CJP, CNP,
34+
RRP, RJP, RNP> | Thenable<ANP> | ANP): PromiseBase<ARD | ARF | ARP, AJD | AJF | AJP, AND | ANF | ANP,
35+
BRD | BRF | BRP, BJD | BJF | BJP, BND | BNF | BNP,
36+
CRD | CRF | CRP, CJD | CJF | CJP, CND | CNF | CNP,
37+
RRD | RRF | RRP, RJD | RJF | RJP, RND | RNF | RNP>;
38+
then<ARF = never, AJF = never, ANF = never,
39+
BRF = never, BJF = never, BNF = never,
40+
CRF = never, CJF = never, CNF = never,
41+
RRF = never, RJF = never, RNF = never,
42+
ARP = never, AJP = never, ANP = never,
43+
BRP = never, BJP = never, BNP = never,
44+
CRP = never, CJP = never, CNP = never,
45+
RRP = never, RJP = never, RNP = never>(
46+
doneFilter: null,
47+
failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => PromiseBase<ARF, AJF, ANF,
48+
BRF, BJF, BNF,
49+
CRF, CJF, CNF,
50+
RRF, RJF, RNF> | Thenable<ARF> | ARF,
51+
progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => PromiseBase<ARP, AJP, ANP,
52+
BRP, BJP, BNP,
53+
CRP, CJP, CNP,
54+
RRP, RJP, RNP> | Thenable<ANP> | ANP): PromiseBase<ARF | ARP, AJF | AJP, ANF | ANP,
55+
BRF | BRP, BJF | BJP, BNF | BNP,
56+
CRF | CRP, CJF | CJP, CNF | CNP,
57+
RRF | RRP, RJF | RJP, RNF | RNP>;
58+
then<ARP = never, AJP = never, ANP = never,
59+
BRP = never, BJP = never, BNP = never,
60+
CRP = never, CJP = never, CNP = never,
61+
RRP = never, RJP = never, RNP = never>(
62+
doneFilter: null,
63+
failFilter: null,
64+
progressFilter?: (t: TN, u: UN, v: VN, ...s: SN[]) => PromiseBase<ARP, AJP, ANP,
65+
BRP, BJP, BNP,
66+
CRP, CJP, CNP,
67+
RRP, RJP, RNP> | Thenable<ANP> | ANP): PromiseBase<ARP, AJP, ANP,
68+
BRP, BJP, BNP,
69+
CRP, CJP, CNP,
70+
RRP, RJP, RNP>;
71+
then<ARD = never, AJD = never, AND = never,
72+
BRD = never, BJD = never, BND = never,
73+
CRD = never, CJD = never, CND = never,
74+
RRD = never, RJD = never, RND = never,
75+
ARF = never, AJF = never, ANF = never,
76+
BRF = never, BJF = never, BNF = never,
77+
CRF = never, CJF = never, CNF = never,
78+
RRF = never, RJF = never, RNF = never>(
79+
doneFilter: (t: TR, u: UR, v: VR, ...s: SR[]) => PromiseBase<ARD, AJD, AND,
80+
BRD, BJD, BND,
81+
CRD, CJD, CND,
82+
RRD, RJD, RND> | Thenable<ARD> | ARD,
83+
failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => PromiseBase<ARF, AJF, ANF,
84+
BRF, BJF, BNF,
85+
CRF, CJF, CNF,
86+
RRF, RJF, RNF> | Thenable<ARF> | ARF,
87+
progressFilter?: null): PromiseBase<ARD | ARF, AJD | AJF, AND | ANF,
88+
BRD | BRF, BJD | BJF, BND | BNF,
89+
CRD | CRF, CJD | CJF, CND | CNF,
90+
RRD | RRF, RJD | RJF, RND | RNF>;
91+
then<ARF = never, AJF = never, ANF = never,
92+
BRF = never, BJF = never, BNF = never,
93+
CRF = never, CJF = never, CNF = never,
94+
RRF = never, RJF = never, RNF = never>(
95+
doneFilter: null,
96+
failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => PromiseBase<ARF, AJF, ANF,
97+
BRF, BJF, BNF,
98+
CRF, CJF, CNF,
99+
RRF, RJF, RNF> | Thenable<ARF> | ARF,
100+
progressFilter?: null): PromiseBase<ARF, AJF, ANF,
101+
BRF, BJF, BNF,
102+
CRF, CJF, CNF,
103+
RRF, RJF, RNF>;
104+
then<ARD = never, AJD = never, AND = never,
105+
BRD = never, BJD = never, BND = never,
106+
CRD = never, CJD = never, CND = never,
107+
RRD = never, RJD = never, RND = never>(
108+
doneFilter: (t: TR, u: UR, v: VR, ...s: SR[]) => PromiseBase<ARD, AJD, AND,
109+
BRD, BJD, BND,
110+
CRD, CJD, CND,
111+
RRD, RJD, RND> | Thenable<ARD> | ARD,
112+
failFilter?: null,
113+
progressFilter?: null): PromiseBase<ARD, AJD, AND,
114+
BRD, BJD, BND,
115+
CRD, CJD, CND,
116+
RRD, RJD, RND>;
117+
}
118+
119+
interface Promise3<TR, TJ, TN,
120+
UR, UJ, UN,
121+
VR, VJ, VN> extends PromiseBase<TR, TJ, TN,
122+
UR, UJ, UN,
123+
VR, VJ, VN,
124+
never, never, never> { }
125+
126+
type T = Awaited<Promise3<string, Error, number, {}, string, boolean, any, Element, never>>; // string
127+
128+
//// [awaitedTypeJQuery.js]
129+
/// <reference lib="dom" />

0 commit comments

Comments
 (0)