Merge pull request #33386 from BendingBender/onetime

[onetime] Update types to v3.0
This commit is contained in:
Jesse Trinity
2019-02-28 10:37:22 -08:00
committed by GitHub
7 changed files with 132 additions and 46 deletions
+33 -24
View File
@@ -1,36 +1,45 @@
// Type definitions for onetime 2.0
// Type definitions for onetime 3.0
// Project: https://github.com/sindresorhus/onetime#readme
// Definitions by: BendingBender <https://github.com/BendingBender>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 3.0
export = oneTime;
declare function oneTime<R>(fn: () => R, options?: oneTime.Options): () => R;
declare function oneTime<T1, R>(fn: (t1: T1) => R, options?: oneTime.Options): (t1: T1) => R;
declare function oneTime<T1, T2, R>(fn: (t1: T1, t2: T2) => R, options?: oneTime.Options): (t1: T1, t2: T2) => R;
declare function oneTime<T1, T2, T3, R>(fn: (t1: T1, t2: T2, t3: T3) => R, options?: oneTime.Options): (t1: T1, t2: T2, t3: T3) => R;
declare function oneTime<T1, T2, T3, T4, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4) => R, options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4) => R;
declare function oneTime<T1, T2, T3, T4, T5, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R;
declare function oneTime<T1, T2, T3, T4, T5, T6, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6) => R, options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6) => R;
declare function oneTime<T1, T2, T3, T4, T5, T6, T7, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7) => R,
options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7) => R;
declare function oneTime<T1, T2, T3, T4, T5, T6, T7, T8, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8) => R,
options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8) => R;
declare function oneTime<T1, T2, T3, T4, T5, T6, T7, T8, T9, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8, t9: T9) => R,
options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8, t9: T9) => R;
declare function oneTime<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8, t9: T9, t10: T10) => R,
options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8, t9: T9, t10: T10) => R;
declare function oneTime<R>(fn: (...args: any[]) => R, options?: oneTime.Options): (...args: any[]) => R;
/**
* Ensure a function is only called once. When called multiple times it will return the return value from the first call.
*
* @param fn Function that should only be called once.
* @returns A function that only calls `fn` once.
*/
declare function oneTime<T extends any[], R>(
fn: (...args: T) => R,
options?: oneTime.Options
): (...args: T) => R;
declare namespace oneTime {
/**
* Get the number of times `fn` has been called.
*
* @param fn Function to get call count from.
* @returns A number representing how many times `fn` has been called.
*
* @example
* const foo = onetime(() => {});
* foo();
* foo();
* foo();
*
* console.log(onetime.callCount(foo));
* //=> 3
*/
function callCount(fn: (...args: any[]) => any): number | undefined;
interface Options {
/**
* Throw an error when called more than once.
* @default false
*/
throw?: boolean;
}
}
+2 -21
View File
@@ -3,29 +3,10 @@ import onetime = require('onetime');
const foo = onetime(() => 5);
foo(); // $ExpectType number
const foo2 = onetime(() => true, {throw: true});
const foo2 = onetime(() => true, { throw: true });
foo2(); // $ExpectType boolean
onetime((t1: boolean) => 5)(true); // $ExpectType number
onetime((t1: boolean, t2: string) => 5)(true, ''); // $ExpectType number
onetime((t1: boolean, t2: string, t3: number) => 5)(true, '', 5); // $ExpectType number
onetime((t1: boolean, t2: string, t3: number, t4: undefined) => 5)(true, '', 5, undefined); // $ExpectType number
onetime((t1: boolean, t2: string, t3: number, t4: undefined, t5: string) => 5)(true, '', 5, undefined, ''); // $ExpectType number
onetime((t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number) => 5)(true, '', 5, undefined, '', 6); // $ExpectType number
onetime((t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number, t7: boolean) => 5)(true, '', 5, undefined, '', 6, false); // $ExpectType number
const t8 = onetime(
(t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number, t7: boolean, t8: string) => 5);
t8(true, '', 5, undefined, '', 6, false, ''); // $ExpectType number
const t9 = onetime(
(t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number, t7: boolean, t8: string, t9: number) => 5);
t9(true, '', 5, undefined, '', 6, false, '', 1); // $ExpectType number
const t10 = onetime(
(t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number, t7: boolean, t8: string, t9: number, t10: boolean) => 5);
t10(true, '', 5, undefined, '', 6, false, '', 1, true); // $ExpectType number
const t11 = onetime(
(t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number, t7: boolean, t8: string, t9: number, t10: boolean, t11: string) => 5);
t11(true, '', 5, undefined, '', 6, false, '', 1, true, 5); // $ExpectType number
onetime.callCount((t1: boolean, t2: string) => 5); // $ExpectType number | undefined
+1 -1
View File
@@ -20,4 +20,4 @@
"index.d.ts",
"onetime-tests.ts"
]
}
}
+36
View File
@@ -0,0 +1,36 @@
// Type definitions for onetime 2.0
// Project: https://github.com/sindresorhus/onetime#readme
// Definitions by: BendingBender <https://github.com/BendingBender>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
export = oneTime;
declare function oneTime<R>(fn: () => R, options?: oneTime.Options): () => R;
declare function oneTime<T1, R>(fn: (t1: T1) => R, options?: oneTime.Options): (t1: T1) => R;
declare function oneTime<T1, T2, R>(fn: (t1: T1, t2: T2) => R, options?: oneTime.Options): (t1: T1, t2: T2) => R;
declare function oneTime<T1, T2, T3, R>(fn: (t1: T1, t2: T2, t3: T3) => R, options?: oneTime.Options): (t1: T1, t2: T2, t3: T3) => R;
declare function oneTime<T1, T2, T3, T4, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4) => R, options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4) => R;
declare function oneTime<T1, T2, T3, T4, T5, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R;
declare function oneTime<T1, T2, T3, T4, T5, T6, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6) => R, options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6) => R;
declare function oneTime<T1, T2, T3, T4, T5, T6, T7, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7) => R,
options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7) => R;
declare function oneTime<T1, T2, T3, T4, T5, T6, T7, T8, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8) => R,
options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8) => R;
declare function oneTime<T1, T2, T3, T4, T5, T6, T7, T8, T9, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8, t9: T9) => R,
options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8, t9: T9) => R;
declare function oneTime<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R>(
fn: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8, t9: T9, t10: T10) => R,
options?: oneTime.Options): (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8, t9: T9, t10: T10) => R;
declare function oneTime<R>(fn: (...args: any[]) => R, options?: oneTime.Options): (...args: any[]) => R;
declare namespace oneTime {
interface Options {
throw?: boolean;
}
}
+31
View File
@@ -0,0 +1,31 @@
import onetime = require('onetime');
const foo = onetime(() => 5);
foo(); // $ExpectType number
const foo2 = onetime(() => true, {throw: true});
foo2(); // $ExpectType boolean
onetime((t1: boolean) => 5)(true); // $ExpectType number
onetime((t1: boolean, t2: string) => 5)(true, ''); // $ExpectType number
onetime((t1: boolean, t2: string, t3: number) => 5)(true, '', 5); // $ExpectType number
onetime((t1: boolean, t2: string, t3: number, t4: undefined) => 5)(true, '', 5, undefined); // $ExpectType number
onetime((t1: boolean, t2: string, t3: number, t4: undefined, t5: string) => 5)(true, '', 5, undefined, ''); // $ExpectType number
onetime((t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number) => 5)(true, '', 5, undefined, '', 6); // $ExpectType number
onetime((t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number, t7: boolean) => 5)(true, '', 5, undefined, '', 6, false); // $ExpectType number
const t8 = onetime(
(t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number, t7: boolean, t8: string) => 5);
t8(true, '', 5, undefined, '', 6, false, ''); // $ExpectType number
const t9 = onetime(
(t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number, t7: boolean, t8: string, t9: number) => 5);
t9(true, '', 5, undefined, '', 6, false, '', 1); // $ExpectType number
const t10 = onetime(
(t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number, t7: boolean, t8: string, t9: number, t10: boolean) => 5);
t10(true, '', 5, undefined, '', 6, false, '', 1, true); // $ExpectType number
const t11 = onetime(
(t1: boolean, t2: string, t3: number, t4: undefined, t5: string, t6: number, t7: boolean, t8: string, t9: number, t10: boolean, t11: string) => 5);
t11(true, '', 5, undefined, '', 6, false, '', 1, true, 5); // $ExpectType number
+28
View File
@@ -0,0 +1,28 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"baseUrl": "../../",
"typeRoots": [
"../../"
],
"paths": {
"onetime": [
"onetime/v2"
]
},
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"onetime-tests.ts"
]
}
+1
View File
@@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }