node: add the definition for util.callbackify (#19114)

* fix(node): add the definition for util.callbackify

* test(node): add an unit test for util.callbackify
This commit is contained in:
Alvis Tang
2017-10-06 19:26:17 +01:00
committed by Ryan Cavanaugh
parent dffd06e0ab
commit 1aefe0126e
2 changed files with 89 additions and 0 deletions

16
types/node/index.d.ts vendored
View File

@@ -14,6 +14,7 @@
// Daniel Imms <https://github.com/Tyriar>
// Deividas Bakanas <https://github.com/DeividasBakanas>
// Kelvin Jin <https://github.com/kjin>
// Alvis HT Tang <https://github.com/alvis>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.2
@@ -5272,6 +5273,21 @@ declare module "util" {
__promisify__: TCustom;
}
export function callbackify(fn: () => Promise<void>): (callback: (err: NodeJS.ErrnoException) => void) => void;
export function callbackify<TResult>(fn: () => Promise<TResult>): (callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void;
export function callbackify<T1>(fn: (arg1: T1) => Promise<void>): (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void;
export function callbackify<T1, TResult>(fn: (arg1: T1) => Promise<TResult>): (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void;
export function callbackify<T1, T2>(fn: (arg1: T1, arg2: T2) => Promise<void>): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void;
export function callbackify<T1, T2, TResult>(fn: (arg1: T1, arg2: T2) => Promise<TResult>): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void;
export function callbackify<T1, T2, T3>(fn: (arg1: T1, arg2: T2, arg3: T3) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void;
export function callbackify<T1, T2, T3, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void;
export function callbackify<T1, T2, T3, T4>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void;
export function callbackify<T1, T2, T3, T4, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void;
export function callbackify<T1, T2, T3, T4, T5>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void;
export function callbackify<T1, T2, T3, T4, T5, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void;
export function callbackify<T1, T2, T3, T4, T5, T6>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<void>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException) => void) => void;
export function callbackify<T1, T2, T3, T4, T5, T6, TResult>(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise<TResult>): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void;
export function promisify<TCustom extends Function>(fn: CustomPromisify<TCustom>): TCustom;
export function promisify<T1, TResult>(fn: (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void): (arg1: T1) => Promise<TResult>;
export function promisify<T1>(fn: (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void): (arg1: T1) => Promise<void>;

View File

@@ -642,6 +642,79 @@ namespace util_tests {
breakLength: Infinity
});
assert(typeof util.inspect.custom === 'symbol');
// util.callbackify
class callbackifyTest {
static fn(): Promise<void> {
assert(arguments.length === 0);
return Promise.resolve();
}
static fnE(): Promise<void> {
assert(arguments.length === 0);
return Promise.reject(new Error('fail'));
}
static fnT1(arg1: string): Promise<void> {
assert(arguments.length === 1 && arg1 === 'parameter');
return Promise.resolve();
}
static fnT1E(arg1: string): Promise<void> {
assert(arguments.length === 1 && arg1 === 'parameter');
return Promise.reject(new Error('fail'));
}
static fnTResult(): Promise<string> {
assert(arguments.length === 0);
return Promise.resolve('result');
}
static fnTResultE(): Promise<string> {
assert(arguments.length === 0);
return Promise.reject(new Error('fail'));
}
static fnT1TResult(arg1: string): Promise<string> {
assert(arguments.length === 1 && arg1 === 'parameter');
return Promise.resolve('result');
}
static fnT1TResultE(arg1: string): Promise<string> {
assert(arguments.length === 1 && arg1 === 'parameter');
return Promise.reject(new Error('fail'));
}
static test(): void {
var cfn = util.callbackify(this.fn);
var cfnE = util.callbackify(this.fnE);
var cfnT1 = util.callbackify(this.fnT1);
var cfnT1E = util.callbackify(this.fnT1E);
var cfnTResult = util.callbackify(this.fnTResult);
var cfnTResultE = util.callbackify(this.fnTResultE);
var cfnT1TResult = util.callbackify(this.fnT1TResult);
var cfnT1TResultE = util.callbackify(this.fnT1TResultE);
cfn((err: NodeJS.ErrnoException, ...args: string[]) => assert(err === null && args.length === 1 && args[0] === undefined));
cfnE((err: NodeJS.ErrnoException, ...args: string[]) => assert(err.message === 'fail' && args.length === 0));
cfnT1('parameter', (err: NodeJS.ErrnoException, ...args: string[]) => assert(err === null && args.length === 1 && args[0] === undefined));
cfnT1E('parameter', (err: NodeJS.ErrnoException, ...args: string[]) => assert(err.message === 'fail' && args.length === 0));
cfnTResult((err: NodeJS.ErrnoException, ...args: string[]) => assert(err === null && args.length === 1 && args[0] === 'result'));
cfnTResultE((err: NodeJS.ErrnoException, ...args: string[]) => assert(err.message === 'fail' && args.length === 0));
cfnT1TResult('parameter', (err: NodeJS.ErrnoException, ...args: string[]) => assert(err === null && args.length === 1 && args[0] === 'result'));
cfnT1TResultE('parameter', (err: NodeJS.ErrnoException, ...args: string[]) => assert(err.message === 'fail' && args.length === 0));
}
}
callbackifyTest.test();
// util.promisify
var readPromised = util.promisify(fs.readFile);
var sampleRead: Promise<any> = readPromised(__filename).then((data: Buffer): void => { }).catch((error: Error): void => { });