diff --git a/types/merge-deep/index.d.ts b/types/merge-deep/index.d.ts new file mode 100644 index 0000000000..ba8d3b767c --- /dev/null +++ b/types/merge-deep/index.d.ts @@ -0,0 +1,13 @@ +// Type definitions for merge-deep 3.0 +// Project: https://github.com/jonschlinkert/merge-deep +// Definitions by: Emily Marigold Klassen +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +export = mergeDeep; + +/** Recursively merge values in a javascript object. */ +declare function mergeDeep(orig: T, objects: U): T & U; +declare function mergeDeep(orig: T, objects1: U, objects2: V): T & U & V; +declare function mergeDeep(orig: T, objects1: U, objects2: V, objects3: W): T & U & V & W; +declare function mergeDeep(orig: T, objects1: U, objects2: V, objects3: W, objects4: X): T & U & V & W & X; +declare function mergeDeep(target: any, ...sources: any[]): any; diff --git a/types/merge-deep/merge-deep-tests.ts b/types/merge-deep/merge-deep-tests.ts new file mode 100644 index 0000000000..de178d0659 --- /dev/null +++ b/types/merge-deep/merge-deep-tests.ts @@ -0,0 +1,43 @@ +import merge = require('merge-deep'); + +merge({a: {b: {c: 'c', d: 'd'}}}, {a: {b: {e: 'e', f: 'f'}}}); + +const objectBase = { + test: 'base' +}; + +const objectOne = { + test: 'one', + iamone: true +}; + +const objectTwo = { + test: 2, + iamtwo: true +}; + +const objectThree = { + iamthree: true, + depth: { + innerType: 'deep' + } +}; + +type ExtendedType = typeof objectBase & typeof objectOne; +const extended: ExtendedType = merge(objectBase, objectOne); +extended.test === 'one'; +extended.iamone; + +type MoreExtendedType = typeof objectBase & typeof objectOne & typeof objectTwo; +const moreExtended: MoreExtendedType = merge(objectBase, objectOne, objectTwo); +moreExtended.test === 2; +moreExtended.iamone; +moreExtended.iamtwo; + +type DeepExtendedType = typeof objectBase & typeof objectOne & + typeof objectTwo & typeof objectThree; +const deepExtended: DeepExtendedType = merge(objectBase, objectOne, objectTwo, objectThree); +deepExtended.iamone; +deepExtended.iamtwo; +deepExtended.iamthree; +deepExtended.depth.innerType === 'deep'; diff --git a/types/merge-deep/tsconfig.json b/types/merge-deep/tsconfig.json new file mode 100644 index 0000000000..4ac02c641d --- /dev/null +++ b/types/merge-deep/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "merge-deep-tests.ts" + ] +} diff --git a/types/merge-deep/tslint.json b/types/merge-deep/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/merge-deep/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }