Ensure inferences to other type parameters are made

This commit is contained in:
Ron Buckton
2020-04-06 18:33:18 -07:00
parent 3b60fe00a3
commit 24b6d64059
6 changed files with 1904 additions and 134 deletions
+40 -19
View File
@@ -18458,10 +18458,16 @@ namespace ts {
return getPromisedTypeOfPromise(promiseType) === promisedType;
}
function isUserDefinedPromiseType(type: Type) {
return !isReferenceToGlobalPromiseType(type) && !!getPromisedTypeOfPromise(type);
}
function inferToMultipleTypes(source: Type, targets: Type[], targetFlags: TypeFlags) {
let typeVariableCount = 0;
if (targetFlags & TypeFlags.Union) {
let nakedTypeVariable: Type | undefined;
let remainderArePromises = false;
const sources = source.flags & TypeFlags.Union ? (<UnionType>source).types : [source];
for (const t of targets) {
if (getInferenceInfoForType(t)) {
nakedTypeVariable = t;
@@ -18470,11 +18476,13 @@ namespace ts {
}
// To better handle inference for `Promise`-like types, we detect a target union of `T | PromiseLike<T>`
// (for any compatible `PromiseLike`). When encountered, we infer from source to the type parameter `T`,
// where each type of source is mapped to extract the promised type of any promise (e.g.,
// `string | Promise<number>` becomes `string | number`).
// (for any compatible `PromiseLike`). When encountered, we infer all promise-like sources to the promise-like
// targets and all non-promise-like sources to the naked type variable. For example when inferring to
// `T | PromiseLike<T>` from `number | boolean | Promise<string>`, we infer to `PromiseLike<T>` from
// `Promise<string>` and to `T` for `number | boolean`. We allow for multiple promise-like types in target
// to better support JQuery's `PromiseBase` which returns something like
// `PromiseBase<T, U, V...> | PromiseLike<T> | T` in its fulfillment callbacks.
if (typeVariableCount === 1) {
let remainderArePromises = false;
for (const t of targets) {
if (!getInferenceInfoForType(t)) {
if (isPromiseForType(t, nakedTypeVariable!)) {
@@ -18486,14 +18494,8 @@ namespace ts {
}
}
}
// remaining constituents are promise-like types whose "promised types" are `T`
if (remainderArePromises) {
inferFromTypes(mapType(source, s => getPromisedTypeOfPromise(s) ?? s), nakedTypeVariable!);
return;
}
}
const sources = source.flags & TypeFlags.Union ? (<UnionType>source).types : [source];
const matched = new Array<boolean>(sources.length);
let inferenceCircularity = false;
// First infer to types that are not naked type variables. For each source type we
@@ -18503,12 +18505,24 @@ namespace ts {
for (const t of targets) {
if (!getInferenceInfoForType(t)) {
for (let i = 0; i < sources.length; i++) {
const saveInferencePriority = inferencePriority;
inferencePriority = InferencePriority.MaxValue;
inferFromTypes(sources[i], t);
if (inferencePriority === priority) matched[i] = true;
inferenceCircularity = inferenceCircularity || inferencePriority === InferencePriority.Circularity;
inferencePriority = Math.min(inferencePriority, saveInferencePriority);
// When inferring to a union consisting solely of `T` and promise-like constituents,
// we infer only custom promise-like sources to promise-like constituents so that we can
// capture inferences to other type arguments. We skip sources with references to the
// global `Promise<T>` and `PromiseLike<T>` types as we can infer the promised types
// of those directly to the type variable, below.
if (!remainderArePromises || isUserDefinedPromiseType(sources[i])) {
const saveInferencePriority = inferencePriority;
inferencePriority = InferencePriority.MaxValue;
// When inferring to a union of `T | PromiseLike<T>`, we will first
// infer a promise-like source to a promise-like target, but we will
// also infer the promised type directly to the type variable.
inferFromTypes(sources[i], t);
if (inferencePriority === priority && !remainderArePromises) {
matched[i] = true;
}
inferenceCircularity = inferenceCircularity || inferencePriority === InferencePriority.Circularity;
inferencePriority = Math.min(inferencePriority, saveInferencePriority);
}
}
}
}
@@ -18527,7 +18541,10 @@ namespace ts {
// types from which no inferences have been made so far and infer from that union to the
// naked type variable.
if (typeVariableCount === 1 && !inferenceCircularity) {
const unmatched = flatMap(sources, (s, i) => matched[i] ? undefined : s);
const unmatched = mapDefined(sources, (s, i) =>
matched[i] ? undefined :
remainderArePromises ? getPromisedTypeOfPromise(s) ?? s :
s);
if (unmatched.length) {
inferFromTypes(getUnionType(unmatched), nakedTypeVariable!);
return;
@@ -30147,6 +30164,11 @@ namespace ts {
return promisedType && getAwaitedType(promisedType, errorNode, diagnosticMessage, arg0);
}
function isReferenceToGlobalPromiseType(type: Type) {
return isReferenceToType(type, getGlobalPromiseType(/*reportErrors*/ false))
|| isReferenceToType(type, getGlobalPromiseLikeType(/*reportErrors*/ false));
}
/**
* Gets the "promised type" of a promise.
* @param type The type of the promise.
@@ -30172,8 +30194,7 @@ namespace ts {
return typeAsPromise.promisedTypeOfPromise;
}
if (isReferenceToType(type, getGlobalPromiseType(/*reportErrors*/ false)) ||
isReferenceToType(type, getGlobalPromiseLikeType(/*reportErrors*/ false))) {
if (isReferenceToGlobalPromiseType(type)) {
return typeAsPromise.promisedTypeOfPromise = getTypeArguments(<GenericType>type)[0];
}
+1 -1
View File
@@ -115,7 +115,7 @@ interface PromiseConstructor {
/**
* Creates a new resolved promise for the provided value.
* @param value A promise.
* @param value A promise or a non-promise value.
* @returns A promise whose internal state matches the provided promise.
*/
resolve<T>(value: T | PromiseLike<T>): Promise<T>;
+11 -6
View File
@@ -230,13 +230,18 @@ namespace ts {
}
function releaseDocumentWithKey(path: Path, key: DocumentRegistryBucketKey): void {
const bucket = Debug.checkDefined(buckets.get(key));
const entry = bucket.get(path)!;
entry.languageServiceRefCount--;
try {
const bucket = Debug.checkDefined(buckets.get(key));
const entry = bucket.get(path)!;
entry.languageServiceRefCount--;
Debug.assert(entry.languageServiceRefCount >= 0);
if (entry.languageServiceRefCount === 0) {
bucket.delete(path);
Debug.assert(entry.languageServiceRefCount >= 0);
if (entry.languageServiceRefCount === 0) {
bucket.delete(path);
}
}
catch (e) {
throw new Error(`${e.message}\npath: ${path}\nkey: ${key}\nhas key: ${buckets.has(key)}\nhas bucket: ${!!buckets.get(key)}\nhas entry: ${buckets.get(key)?.has(path)}\npaths in bucket: ${JSON.stringify([...arrayFrom((buckets.get(key) ?? createMap()).keys())])}`);
}
}
File diff suppressed because it is too large Load Diff
@@ -1,67 +1,511 @@
=== tests/cases/compiler/promiseTypeInference2.ts ===
const p1 = Promise.resolve(null);
>p1 : Promise<any>
>Promise.resolve(null) : Promise<any>
declare const P: Promise<void>;
>P : Promise<void>
declare const a: number;
>a : number
declare const b: Promise<number>;
>b : Promise<number>
declare const c: Promise<number> | Promise<string>;
>c : Promise<number> | Promise<string>
declare const d: Promise<number> | string;
>d : string | Promise<number>
declare const e: Promise<number> | string | boolean;
>e : string | boolean | Promise<number>
declare const f: number | string;
>f : string | number
declare const g: PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>;
>g : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
// native promise inference
P.then(() => a); // Promise<number>
>P.then(() => a) : Promise<number>
>P.then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>P : Promise<void>
>then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>() => a : () => number
>a : number
P.then(() => b); // Promise<number>
>P.then(() => b) : Promise<number>
>P.then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>P : Promise<void>
>then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>() => b : () => Promise<number>
>b : Promise<number>
P.then(() => c); // Promise<string | number>
>P.then(() => c) : Promise<string | number>
>P.then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>P : Promise<void>
>then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>() => c : () => Promise<number> | Promise<string>
>c : Promise<number> | Promise<string>
P.then(() => d); // Promise<string | number>
>P.then(() => d) : Promise<string | number>
>P.then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>P : Promise<void>
>then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>() => d : () => string | Promise<number>
>d : string | Promise<number>
P.then(() => e); // Promise<string | number | boolean>
>P.then(() => e) : Promise<string | number | boolean>
>P.then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>P : Promise<void>
>then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>() => e : () => string | boolean | Promise<number>
>e : string | boolean | Promise<number>
P.then(() => f); // Promise<string | number>
>P.then(() => f) : Promise<string | number>
>P.then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>P : Promise<void>
>then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>() => f : () => string | number
>f : string | number
P.then(() => g); // Promise<string>
>P.then(() => g) : Promise<string>
>P.then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>P : Promise<void>
>then : <TResult1 = void, TResult2 = never>(onfulfilled?: (value: void) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>() => g : () => PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
>g : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
Promise.resolve(a); // Promise<number>
>Promise.resolve(a) : Promise<number>
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>Promise : PromiseConstructor
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>a : number
Promise.resolve(b); // Promise<number>
>Promise.resolve(b) : Promise<number>
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>Promise : PromiseConstructor
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>b : Promise<number>
Promise.resolve(c); // Promise<string | number>
>Promise.resolve(c) : Promise<string | number>
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>Promise : PromiseConstructor
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>c : Promise<number> | Promise<string>
Promise.resolve(d); // Promise<string | number>
>Promise.resolve(d) : Promise<string | number>
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>Promise : PromiseConstructor
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>d : string | Promise<number>
Promise.resolve(e); // Promise<string | number | boolean>
>Promise.resolve(e) : Promise<string | number | boolean>
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>Promise : PromiseConstructor
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>e : string | boolean | Promise<number>
Promise.resolve(f); // Promise<string | number>
>Promise.resolve(f) : Promise<string | number>
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>Promise : PromiseConstructor
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>f : string | number
Promise.resolve(g); // Promise<string>
>Promise.resolve(g) : Promise<string>
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>Promise : PromiseConstructor
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>g : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
// userland promise inference with more complex fulfillment types
g.then(() => a); // PromiseBase<number, ...>
>g.then(() => a) : PromiseBase<number, never, never, never, never, never, never, never, never, never, never, never>
>g.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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>g : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
>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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>() => a : () => number
>a : number
g.then(() => b); // PromiseBase<number, ...>
>g.then(() => b) : PromiseBase<number, never, never, never, never, never, never, never, never, never, never, never>
>g.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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>g : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
>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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>() => b : () => Promise<number>
>b : Promise<number>
g.then(() => c); // PromiseBase<string | number, ...>
>g.then(() => c) : PromiseBase<string | number, never, never, never, never, never, never, never, never, never, never, never>
>g.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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>g : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
>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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>() => c : () => Promise<number> | Promise<string>
>c : Promise<number> | Promise<string>
g.then(() => d); // PromiseBase<string | number, ...>
>g.then(() => d) : PromiseBase<string | number, never, never, never, never, never, never, never, never, never, never, never>
>g.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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>g : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
>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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>() => d : () => string | Promise<number>
>d : string | Promise<number>
g.then(() => e); // PromiseBase<string | number | boolean, ...>
>g.then(() => e) : PromiseBase<string | number | boolean, never, never, never, never, never, never, never, never, never, never, never>
>g.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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>g : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
>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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>() => e : () => string | boolean | Promise<number>
>e : string | boolean | Promise<number>
g.then(() => f); // PromiseBase<string | number, ...>
>g.then(() => f) : PromiseBase<string | number, never, never, never, never, never, never, never, never, never, never, never>
>g.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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>g : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
>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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>() => f : () => string | number
>f : string | number
// adapted from DefinitelyTyped: /types/jquery/jquery-tests.ts
g.then(() => g).then(
>g.then(() => g).then( (tr, ur, vr) => { tr; // string ur; // object vr; // any }, (tj, uj, vj) => { tj; // Error uj; // string vj; // Element }, (tn, un, vn) => { tn; // number un; // boolean vn; // never }) : PromiseBase<void, never, void, never, never, never, never, never, never, never, never, never>
>g.then(() => g).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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>g.then(() => g) : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
>g.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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>g : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
>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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
>() => g : () => PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
>g : PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>
>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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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: number, u: boolean, v: never, ...s: never[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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: Error, u: string, v: Element, ...s: never[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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: string, u: object, v: any, ...s: never[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
(tr, ur, vr) => {
>(tr, ur, vr) => { tr; // string ur; // object vr; // any } : (tr: string, ur: object, vr: any) => void
>tr : string
>ur : object
>vr : any
tr; // string
>tr : string
ur; // object
>ur : object
vr; // any
>vr : any
},
(tj, uj, vj) => {
>(tj, uj, vj) => { tj; // Error uj; // string vj; // Element } : (tj: Error, uj: string, vj: Element) => void
>tj : Error
>uj : string
>vj : Element
tj; // Error
>tj : Error
uj; // string
>uj : string
vj; // Element
>vj : Element
},
(tn, un, vn) => {
>(tn, un, vn) => { tn; // number un; // boolean vn; // never } : (tn: number, un: boolean, vn: never) => void
>tn : number
>un : boolean
>vn : never
tn; // number
>tn : number
un; // boolean
>un : boolean
vn; // never
>vn : never
});
// JQuery's PromiseBase
interface Thenable<T> extends PromiseLike<T> {}
interface PromiseBase<
TR, TJ, TN,
UR, UJ, UN,
VR, VJ, VN,
SR, SJ, SN
> {
then<ARD = never, AJD = never, AND = never,
>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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
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,
>doneFilter : (t: TR, u: UR, v: VR, ...s: SR[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>
>t : TR
>u : UR
>v : VR
>s : SR[]
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,
>failFilter : (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>
>t : TJ
>u : UJ
>v : VJ
>s : SJ[]
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,
>progressFilter : (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>
>t : TN
>u : UN
>v : VN
>s : SN[]
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,
>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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
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,
>doneFilter : null
>null : null
const p2 = p1.then(() => 100);
>p2 : Promise<number>
>p1.then(() => 100) : Promise<number>
>p1.then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>p1 : Promise<any>
>then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>() => 100 : () => number
>100 : 100
failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => PromiseBase<ARF, AJF, ANF,
>failFilter : (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>
>t : TJ
>u : UJ
>v : VJ
>s : SJ[]
const p3 = p1.then(() => Promise.resolve(100));
>p3 : Promise<number>
>p1.then(() => Promise.resolve(100)) : Promise<number>
>p1.then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>p1 : Promise<any>
>then : <TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>) => Promise<TResult1 | TResult2>
>() => Promise.resolve(100) : () => Promise<number>
>Promise.resolve(100) : Promise<number>
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>Promise : PromiseConstructor
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>100 : 100
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,
>progressFilter : (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>
>t : TN
>u : UN
>v : VN
>s : SN[]
declare const p4: Promise<number> | Promise<string>;
>p4 : Promise<number> | Promise<string>
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<ARD = never, AJD = never, AND = never,
>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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
const p5 = Promise.resolve(p4);
>p5 : Promise<string | number>
>Promise.resolve(p4) : Promise<string | number>
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>Promise : PromiseConstructor
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>p4 : Promise<number> | Promise<string>
BRD = never, BJD = never, BND = never,
CRD = never, CJD = never, CND = never,
RRD = never, RJD = never, RND = 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,
>doneFilter : (t: TR, u: UR, v: VR, ...s: SR[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>
>t : TR
>u : UR
>v : VR
>s : SR[]
declare const p6: PromiseLike<number> & { x: 1 } | PromiseLike<string> & { x: 2 };
>p6 : (PromiseLike<number> & { x: 1; }) | (PromiseLike<string> & { x: 2; })
>x : 1
>x : 2
BRD, BJD, BND,
CRD, CJD, CND,
RRD, RJD, RND> | Thenable<ARD> | ARD,
failFilter: null,
>failFilter : null
>null : null
const p7 = Promise.resolve(p6);
>p7 : Promise<string | number>
>Promise.resolve(p6) : Promise<string | number>
>Promise.resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>Promise : PromiseConstructor
>resolve : { <T>(value: T | PromiseLike<T>): Promise<T>; (): Promise<void>; }
>p6 : (PromiseLike<number> & { x: 1; }) | (PromiseLike<string> & { x: 2; })
progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => PromiseBase<ARP, AJP, ANP,
>progressFilter : (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>
>t : TN
>u : UN
>v : VN
>s : SN[]
declare function resolve<T>(value: T | PromiseLike<T> & { x: 1 } | PromiseLike<T> & { x: 2 }): Promise<T>;
>resolve : <T>(value: T | (PromiseLike<T> & { x: 1; }) | (PromiseLike<T> & { x: 2; })) => Promise<T>
>value : T | (PromiseLike<T> & { x: 1; }) | (PromiseLike<T> & { x: 2; })
>x : 1
>x : 2
BRP, BJP, BNP,
CRP, CJP, CNP,
RRP, RJP, RNP> | Thenable<ANP> | ANP): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP,
BRD | BRP, BJD | BJP, BND | BNP,
CRD | CRP, CJD | CJP, CND | CNP,
RRD | RRP, RJD | RJP, RND | RNP>;
then<ARP = never, AJP = never, ANP = never,
>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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
const p8 = resolve(p6);
>p8 : Promise<string | number>
>resolve(p6) : Promise<string | number>
>resolve : <T>(value: T | (PromiseLike<T> & { x: 1; }) | (PromiseLike<T> & { x: 2; })) => Promise<T>
>p6 : (PromiseLike<number> & { x: 1; }) | (PromiseLike<string> & { x: 2; })
BRP = never, BJP = never, BNP = never,
CRP = never, CJP = never, CNP = never,
RRP = never, RJP = never, RNP = never>(
doneFilter: null,
>doneFilter : null
>null : null
failFilter: null,
>failFilter : null
>null : null
progressFilter?: (t: TN, u: UN, v: VN, ...s: SN[]) => PromiseBase<ARP, AJP, ANP,
>progressFilter : (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>
>t : TN
>u : UN
>v : VN
>s : SN[]
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,
>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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
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,
>doneFilter : (t: TR, u: UR, v: VR, ...s: SR[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>
>t : TR
>u : UR
>v : VR
>s : SR[]
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,
>failFilter : (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>
>t : TJ
>u : UJ
>v : VJ
>s : SJ[]
BRF, BJF, BNF,
CRF, CJF, CNF,
RRF, RJF, RNF> | Thenable<ARF> | ARF,
progressFilter?: null): PromiseBase<ARD | ARF, AJD | AJF, AND | ANF,
>progressFilter : null
>null : null
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,
>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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
BRF = never, BJF = never, BNF = never,
CRF = never, CJF = never, CNF = never,
RRF = never, RJF = never, RNF = never>(
doneFilter: null,
>doneFilter : null
>null : null
failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => PromiseBase<ARF, AJF, ANF,
>failFilter : (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>
>t : TJ
>u : UJ
>v : VJ
>s : SJ[]
BRF, BJF, BNF,
CRF, CJF, CNF,
RRF, RJF, RNF> | Thenable<ARF> | ARF,
progressFilter?: null): PromiseBase<ARF, AJF, ANF,
>progressFilter : null
>null : null
BRF, BJF, BNF,
CRF, CJF, CNF,
RRF, RJF, RNF>;
then<ARD = never, AJD = never, AND = never,
>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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<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>; <ARD = never, AJD = never, AND = never, BRD = never, BJD = never, BND = never, CRD = never, CJD = never, CND = never, RRD = never, RJD = never, RND = 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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: null, progressFilter: (t: TN, u: UN, v: VN, ...s: SN[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARD | ARP, AJD | AJP, AND | ANP, BRD | BRP, BJD | BJP, BND | BNP, CRD | CRP, CJD | CJP, CND | CNP, RRD | RRP, RJD | RJP, RND | RNP>; <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[]) => ANP | PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP> | Thenable<ANP>): PromiseBase<ARP, AJP, ANP, BRP, BJP, BNP, CRP, CJP, CNP, RRP, RJP, RNP>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<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>; <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[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>, progressFilter?: null): PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>; <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[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>, failFilter?: null, progressFilter?: null): PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND>; }
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,
>doneFilter : (t: TR, u: UR, v: VR, ...s: SR[]) => ARD | PromiseBase<ARD, AJD, AND, BRD, BJD, BND, CRD, CJD, CND, RRD, RJD, RND> | Thenable<ARD>
>t : TR
>u : UR
>v : VR
>s : SR[]
BRD, BJD, BND,
CRD, CJD, CND,
RRD, RJD, RND> | Thenable<ARD> | ARD,
failFilter?: null,
>failFilter : null
>null : null
progressFilter?: null): PromiseBase<ARD, AJD, AND,
>progressFilter : null
>null : null
BRD, BJD, BND,
CRD, CJD, CND,
RRD, RJD, RND>;
catch<ARF = never, AJF = never, ANF = never,
>catch : <ARF = never, AJF = never, ANF = never, BRF = never, BJF = never, BNF = never, CRF = never, CJF = never, CNF = never, RRF = never, RJF = never, RNF = never>(failFilter?: (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>) => PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF>
BRF = never, BJF = never, BNF = never,
CRF = never, CJF = never, CNF = never,
RRF = never, RJF = never, RNF = never>(
failFilter?: ((t: TJ, u: UJ, v: VJ, ...s: SJ[]) => PromiseBase<ARF, AJF, ANF,
>failFilter : (t: TJ, u: UJ, v: VJ, ...s: SJ[]) => ARF | PromiseBase<ARF, AJF, ANF, BRF, BJF, BNF, CRF, CJF, CNF, RRF, RJF, RNF> | Thenable<ARF>
>t : TJ
>u : UJ
>v : VJ
>s : SJ[]
BRF, BJF, BNF,
CRF, CJF, CNF,
RRF, RJF, RNF> | Thenable<ARF> | ARF) | null): PromiseBase<ARF, AJF, ANF,
>null : null
BRF, BJF, BNF,
CRF, CJF, CNF,
RRF, RJF, RNF>;
}
+197 -9
View File
@@ -1,15 +1,203 @@
// @target: es2015
// @lib: es2015, dom
// @noEmit: true
const p1 = Promise.resolve(null);
const p2 = p1.then(() => 100);
const p3 = p1.then(() => Promise.resolve(100));
declare const p4: Promise<number> | Promise<string>;
const p5 = Promise.resolve(p4);
declare const P: Promise<void>;
declare const a: number;
declare const b: Promise<number>;
declare const c: Promise<number> | Promise<string>;
declare const d: Promise<number> | string;
declare const e: Promise<number> | string | boolean;
declare const f: number | string;
declare const g: PromiseBase<string, Error, number, object, string, boolean, any, Element, never, never, never, never>;
declare const p6: PromiseLike<number> & { x: 1 } | PromiseLike<string> & { x: 2 };
const p7 = Promise.resolve(p6);
// native promise inference
P.then(() => a); // Promise<number>
P.then(() => b); // Promise<number>
P.then(() => c); // Promise<string | number>
P.then(() => d); // Promise<string | number>
P.then(() => e); // Promise<string | number | boolean>
P.then(() => f); // Promise<string | number>
P.then(() => g); // Promise<string>
declare function resolve<T>(value: T | PromiseLike<T> & { x: 1 } | PromiseLike<T> & { x: 2 }): Promise<T>;
const p8 = resolve(p6);
Promise.resolve(a); // Promise<number>
Promise.resolve(b); // Promise<number>
Promise.resolve(c); // Promise<string | number>
Promise.resolve(d); // Promise<string | number>
Promise.resolve(e); // Promise<string | number | boolean>
Promise.resolve(f); // Promise<string | number>
Promise.resolve(g); // Promise<string>
// userland promise inference with more complex fulfillment types
g.then(() => a); // PromiseBase<number, ...>
g.then(() => b); // PromiseBase<number, ...>
g.then(() => c); // PromiseBase<string | number, ...>
g.then(() => d); // PromiseBase<string | number, ...>
g.then(() => e); // PromiseBase<string | number | boolean, ...>
g.then(() => f); // PromiseBase<string | number, ...>
// adapted from DefinitelyTyped: /types/jquery/jquery-tests.ts
g.then(() => g).then(
(tr, ur, vr) => {
tr; // string
ur; // object
vr; // any
},
(tj, uj, vj) => {
tj; // Error
uj; // string
vj; // Element
},
(tn, un, vn) => {
tn; // number
un; // boolean
vn; // never
});
// JQuery's PromiseBase
interface Thenable<T> extends PromiseLike<T> {}
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<ARD = never, AJD = never, AND = never,
BRD = never, BJD = never, BND = never,
CRD = never, CJD = never, CND = never,
RRD = never, RJD = never, RND = 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: 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<ARD | ARP, AJD | AJP, AND | ANP,
BRD | BRP, BJD | BJP, BND | BNP,
CRD | CRP, CJD | CJP, CND | CNP,
RRD | RRP, RJD | RJP, RND | 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>;
catch<ARF = never, AJF = never, ANF = never,
BRF = never, BJF = never, BNF = never,
CRF = never, CJF = never, CNF = never,
RRF = never, RJF = never, RNF = never>(
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) | null): PromiseBase<ARF, AJF, ANF,
BRF, BJF, BNF,
CRF, CJF, CNF,
RRF, RJF, RNF>;
}