[shimmer] Use keyof T generics

This commit is contained in:
Kelvin Jin
2018-02-23 10:18:39 -08:00
parent 1254d58f4a
commit 0824c575b2
3 changed files with 38 additions and 32 deletions
+15 -15
View File
@@ -2,7 +2,7 @@
// Project: https://github.com/othiym23/shimmer
// Definitions by: Kelvin Jin <https://github.com/kjin>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.4
// TypeScript Version: 2.2
declare global {
interface Function {
@@ -12,23 +12,23 @@ declare global {
declare const shimmer: {
(options: { logger?(msg: string): void }): void;
wrap<T extends (...args: any[]) => any>(
nodule: object,
name: string,
wrapper: (original: T) => T
wrap<Nodule extends object, FieldName extends keyof Nodule>(
nodule: Nodule,
name: FieldName,
wrapper: (original: Nodule[FieldName]) => Nodule[FieldName]
): void;
massWrap<T extends (...args: any[]) => any>(
nodules: object[],
names: string[],
wrapper: (original: T) => T
massWrap<Nodule extends object, FieldName extends keyof Nodule>(
nodules: Nodule[],
names: FieldName[],
wrapper: (original: Nodule[FieldName]) => Nodule[FieldName]
): void;
unwrap(
nodule: object,
name: string
unwrap<Nodule extends object>(
nodule: Nodule,
name: keyof Nodule
): void;
massUnwrap(
nodules: object[],
names: string[]
massUnwrap<Nodule extends object>(
nodules: Nodule[],
names: Array<keyof Nodule>
): void;
};
+17 -16
View File
@@ -1,23 +1,24 @@
import * as shimmer from 'shimmer';
const isWrapped: boolean = [].forEach.__wrapped || false;
const fish = {
name: 'shimmer',
age: 1,
getMotto: () => 'safer monkeypatching for Node.js'
};
shimmer.wrap(Array.prototype, 'forEach', (forEach) => {
return (...args: any[]) => {
forEach(...args);
};
const turtle = {
name: 'node',
age: 9
};
shimmer.wrap(fish, 'name', (originalName) => {
return originalName + originalName;
});
shimmer.unwrap(Array.prototype, 'forEach');
shimmer.massWrap([Map.prototype, Set.prototype], ['clear', 'forEach'], (fn) => {
return (...args: any[]) => {
const result = fn(...args);
if (result) {
throw new Error();
}
return result;
};
shimmer.massWrap([fish, turtle], ['age'], (originalAge) => {
return Math.pow(originalAge, 2);
});
shimmer.massUnwrap([Map.prototype, Set.prototype], ['clear', 'forEach']);
shimmer.unwrap(fish, 'name');
shimmer.massUnwrap([fish, turtle], ['age']);
+6 -1
View File
@@ -1 +1,6 @@
{ "extends": "dtslint/dt.json" }
{
"extends": "dtslint/dt.json",
"rules": {
"strict-export-declare-modifiers": false
}
}