mirror of
https://github.com/zhigang1992/DefinitelyTyped.git
synced 2026-05-25 08:06:22 +08:00
Merge pull request #23877 from kjin/shimmer-keyof
[shimmer] Use keyof T generics
This commit is contained in:
30
types/shimmer/index.d.ts
vendored
30
types/shimmer/index.d.ts
vendored
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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']);
|
||||
|
||||
@@ -1 +1,6 @@
|
||||
{ "extends": "dtslint/dt.json" }
|
||||
{
|
||||
"extends": "dtslint/dt.json",
|
||||
"rules": {
|
||||
"strict-export-declare-modifiers": false
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user