64 lines
2.9 KiB
TypeScript
64 lines
2.9 KiB
TypeScript
//// [declarationEmitPromise.ts]
|
|
|
|
export class bluebird<T> {
|
|
static all: Array<bluebird<any>>;
|
|
}
|
|
|
|
export async function runSampleWorks<A, B, C, D, E>(
|
|
a: bluebird<A>, b?: bluebird<B>, c?: bluebird<C>, d?: bluebird<D>, e?: bluebird<E>) {
|
|
let result = await (bluebird.all as any)([a, b, c, d, e].filter(el => !!el));
|
|
let func = <T>(f: (a: A, b?: B, c?: C, d?: D, e?: E) => T): T =>
|
|
f.apply(this, result);
|
|
let rfunc: typeof func & {} = func as any; // <- This is the only difference
|
|
return rfunc
|
|
}
|
|
|
|
export async function runSampleBreaks<A, B, C, D, E>(
|
|
a: bluebird<A>, b?: bluebird<B>, c?: bluebird<C>, d?: bluebird<D>, e?: bluebird<E>) {
|
|
let result = await (bluebird.all as any)([a, b, c, d, e].filter(el => !!el));
|
|
let func = <T>(f: (a: A, b?: B, c?: C, d?: D, e?: E) => T): T =>
|
|
f.apply(this, result);
|
|
let rfunc: typeof func = func as any; // <- This is the only difference
|
|
return rfunc
|
|
}
|
|
|
|
//// [declarationEmitPromise.js]
|
|
"use strict";
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments)).next());
|
|
});
|
|
};
|
|
class bluebird {
|
|
}
|
|
exports.bluebird = bluebird;
|
|
function runSampleWorks(a, b, c, d, e) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
let result = yield bluebird.all([a, b, c, d, e].filter(el => !!el));
|
|
let func = (f) => f.apply(this, result);
|
|
let rfunc = func; // <- This is the only difference
|
|
return rfunc;
|
|
});
|
|
}
|
|
exports.runSampleWorks = runSampleWorks;
|
|
function runSampleBreaks(a, b, c, d, e) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
let result = yield bluebird.all([a, b, c, d, e].filter(el => !!el));
|
|
let func = (f) => f.apply(this, result);
|
|
let rfunc = func; // <- This is the only difference
|
|
return rfunc;
|
|
});
|
|
}
|
|
exports.runSampleBreaks = runSampleBreaks;
|
|
|
|
|
|
//// [declarationEmitPromise.d.ts]
|
|
export declare class bluebird<T> {
|
|
static all: Array<bluebird<any>>;
|
|
}
|
|
export declare function runSampleWorks<A, B, C, D, E>(a: bluebird<A>, b?: bluebird<B>, c?: bluebird<C>, d?: bluebird<D>, e?: bluebird<E>): Promise<(<T>(f: (a: A, b?: B, c?: C, d?: D, e?: E) => T) => T) & {}>;
|
|
export declare function runSampleBreaks<A, B, C, D, E>(a: bluebird<A>, b?: bluebird<B>, c?: bluebird<C>, d?: bluebird<D>, e?: bluebird<E>): Promise<(<T>(f: (a: A, b?: B, c?: C, d?: D, e?: E) => T) => T)>;
|