Skip to content

Commit

Permalink
Fix issue with Awaited affecting jQuery, additional tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rbuckton committed Mar 22, 2022
1 parent ff6fac5 commit 915863f
Show file tree
Hide file tree
Showing 13 changed files with 1,353 additions and 8 deletions.
4 changes: 2 additions & 2 deletions src/lib/es5.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1500,8 +1500,8 @@ interface Promise<T> {
*/
type Awaited<T> =
T extends null | undefined ? T : // special case for `null | undefined` when not in `--strictNullChecks` mode
T extends object & { then(onfulfilled: infer F): any } ? // `await` only unwraps object types with a callable `then`. Non-object types are not unwrapped
F extends ((value: infer V, ...args: any) => any) ? // if the argument to `then` is callable, extracts the first argument
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
F extends ((value: infer V, ...args: infer _) => any) ? // if the argument to `then` is callable, extracts the first argument
Awaited<V> : // recursively unwrap the value
never : // the argument to `then` was not callable
T; // non-object or non-thenable
Expand Down
3 changes: 1 addition & 2 deletions tests/baselines/reference/asyncFunctionReturnType.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,7 @@ async function fGenericIndexedTypeForPromiseOfKProp<TObj extends Obj, K extends

async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K extends keyof TObj>(obj: TObj, key: K): Promise<TObj[K]> {
return Promise.resolve<TObj[K]>(obj[key]);
}

}

//// [asyncFunctionReturnType.js]
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
Expand Down
1 change: 0 additions & 1 deletion tests/baselines/reference/asyncFunctionReturnType.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -285,4 +285,3 @@ async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K
>obj : Symbol(obj, Decl(asyncFunctionReturnType.ts, 72, 100))
>key : Symbol(key, Decl(asyncFunctionReturnType.ts, 72, 110))
}

1 change: 0 additions & 1 deletion tests/baselines/reference/asyncFunctionReturnType.types
Original file line number Diff line number Diff line change
Expand Up @@ -220,4 +220,3 @@ async function fGenericIndexedTypeForExplicitPromiseOfKProp<TObj extends Obj, K
>obj : TObj
>key : K
}

129 changes: 129 additions & 0 deletions tests/baselines/reference/awaitedTypeJQuery.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
//// [awaitedTypeJQuery.ts]
/// <reference lib="dom" />

interface Thenable<T> extends PromiseLike<T> { }

// JQuery's Promise type
interface PromiseBase<TR, TJ, TN,
UR, UJ, UN,
VR, VJ, VN,
SR, SJ, SN> {
then<ARD = never, AJD = never, AND = never,
BRD = never, BJD = never, BND = never,
CRD = never, CJD = never, CND = never,
RRD = never, RJD = never, RND = never,
ARF = never, AJF = never, ANF = never,
BRF = never, BJF = never, BNF = never,
CRF = never, CJF = never, CNF = never,
RRF = never, RJF = never, RNF = never,
ARP = never, AJP = never, ANP = never,
BRP = never, BJP = never, BNP = never,
CRP = never, CJP = never, CNP = never,
RRP = never, RJP = never, RNP = never>(
doneFilter: (t: TR, u: UR, v: VR, ...s: SR[]) => PromiseBase<ARD, AJD, AND,
BRD, BJD, BND,
CRD, CJD, CND,
RRD, RJD, RND> | Thenable<ARD> | ARD,
failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => PromiseBase<ARF, AJF, ANF,
BRF, BJF, BNF,
CRF, CJF, CNF,
RRF, RJF, RNF> | Thenable<ARF> | ARF,
progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => PromiseBase<ARP, AJP, ANP,
BRP, BJP, BNP,
CRP, CJP, CNP,
RRP, RJP, RNP> | Thenable<ANP> | ANP): PromiseBase<ARD | ARF | ARP, AJD | AJF | AJP, AND | ANF | ANP,
BRD | BRF | BRP, BJD | BJF | BJP, BND | BNF | BNP,
CRD | CRF | CRP, CJD | CJF | CJP, CND | CNF | CNP,
RRD | RRF | RRP, RJD | RJF | RJP, RND | RNF | RNP>;
then<ARF = never, AJF = never, ANF = never,
BRF = never, BJF = never, BNF = never,
CRF = never, CJF = never, CNF = never,
RRF = never, RJF = never, RNF = never,
ARP = never, AJP = never, ANP = never,
BRP = never, BJP = never, BNP = never,
CRP = never, CJP = never, CNP = never,
RRP = never, RJP = never, RNP = never>(
doneFilter: null,
failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => PromiseBase<ARF, AJF, ANF,
BRF, BJF, BNF,
CRF, CJF, CNF,
RRF, RJF, RNF> | Thenable<ARF> | ARF,
progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => PromiseBase<ARP, AJP, ANP,
BRP, BJP, BNP,
CRP, CJP, CNP,
RRP, RJP, RNP> | Thenable<ANP> | ANP): PromiseBase<ARF | ARP, AJF | AJP, ANF | ANP,
BRF | BRP, BJF | BJP, BNF | BNP,
CRF | CRP, CJF | CJP, CNF | CNP,
RRF | RRP, RJF | RJP, RNF | RNP>;
then<ARP = never, AJP = never, ANP = never,
BRP = never, BJP = never, BNP = never,
CRP = never, CJP = never, CNP = never,
RRP = never, RJP = never, RNP = never>(
doneFilter: null,
failFilter: null,
progressFilter?: (t: TN, u: UN, v: VN, ...s: SN[]) => PromiseBase<ARP, AJP, ANP,
BRP, BJP, BNP,
CRP, CJP, CNP,
RRP, RJP, RNP> | Thenable<ANP> | ANP): PromiseBase<ARP, AJP, ANP,
BRP, BJP, BNP,
CRP, CJP, CNP,
RRP, RJP, RNP>;
then<ARD = never, AJD = never, AND = never,
BRD = never, BJD = never, BND = never,
CRD = never, CJD = never, CND = never,
RRD = never, RJD = never, RND = never,
ARF = never, AJF = never, ANF = never,
BRF = never, BJF = never, BNF = never,
CRF = never, CJF = never, CNF = never,
RRF = never, RJF = never, RNF = never>(
doneFilter: (t: TR, u: UR, v: VR, ...s: SR[]) => PromiseBase<ARD, AJD, AND,
BRD, BJD, BND,
CRD, CJD, CND,
RRD, RJD, RND> | Thenable<ARD> | ARD,
failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => PromiseBase<ARF, AJF, ANF,
BRF, BJF, BNF,
CRF, CJF, CNF,
RRF, RJF, RNF> | Thenable<ARF> | ARF,
progressFilter?: null): PromiseBase<ARD | ARF, AJD | AJF, AND | ANF,
BRD | BRF, BJD | BJF, BND | BNF,
CRD | CRF, CJD | CJF, CND | CNF,
RRD | RRF, RJD | RJF, RND | RNF>;
then<ARF = never, AJF = never, ANF = never,
BRF = never, BJF = never, BNF = never,
CRF = never, CJF = never, CNF = never,
RRF = never, RJF = never, RNF = never>(
doneFilter: null,
failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => PromiseBase<ARF, AJF, ANF,
BRF, BJF, BNF,
CRF, CJF, CNF,
RRF, RJF, RNF> | Thenable<ARF> | ARF,
progressFilter?: null): PromiseBase<ARF, AJF, ANF,
BRF, BJF, BNF,
CRF, CJF, CNF,
RRF, RJF, RNF>;
then<ARD = never, AJD = never, AND = never,
BRD = never, BJD = never, BND = never,
CRD = never, CJD = never, CND = never,
RRD = never, RJD = never, RND = never>(
doneFilter: (t: TR, u: UR, v: VR, ...s: SR[]) => PromiseBase<ARD, AJD, AND,
BRD, BJD, BND,
CRD, CJD, CND,
RRD, RJD, RND> | Thenable<ARD> | ARD,
failFilter?: null,
progressFilter?: null): PromiseBase<ARD, AJD, AND,
BRD, BJD, BND,
CRD, CJD, CND,
RRD, RJD, RND>;
}

interface Promise3<TR, TJ, TN,
UR, UJ, UN,
VR, VJ, VN> extends PromiseBase<TR, TJ, TN,
UR, UJ, UN,
VR, VJ, VN,
never, never, never> { }

type T = Awaited<Promise3<string, Error, number, {}, string, boolean, any, Element, never>>; // string

//// [awaitedTypeJQuery.js]
/// <reference lib="dom" />
Loading

0 comments on commit 915863f

Please sign in to comment.