Merge pull request #23877 from kjin/shimmer-keyof

[shimmer] Use keyof T generics
This commit is contained in:
Bowden Kelly
2018-03-01 10:43:40 -08:00
committed by GitHub
3 changed files with 38 additions and 32 deletions

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;
};

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']);

View File

@@ -1 +1,6 @@
{ "extends": "dtslint/dt.json" }
{
"extends": "dtslint/dt.json",
"rules": {
"strict-export-declare-modifiers": false
}
}