From c448d9b017a9806d5ebf253384bbf027b2bb9072 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Sat, 17 Feb 2018 01:16:48 -0800 Subject: [PATCH] Added 'get-value'. --- types/get-value/get-value-tests.ts | 22 +++++++++++++ types/get-value/index.d.ts | 53 ++++++++++++++++++++++++++++++ types/get-value/tsconfig.json | 23 +++++++++++++ types/get-value/tslint.json | 1 + 4 files changed, 99 insertions(+) create mode 100644 types/get-value/get-value-tests.ts create mode 100644 types/get-value/index.d.ts create mode 100644 types/get-value/tsconfig.json create mode 100644 types/get-value/tslint.json diff --git a/types/get-value/get-value-tests.ts b/types/get-value/get-value-tests.ts new file mode 100644 index 0000000000..9e7534e000 --- /dev/null +++ b/types/get-value/get-value-tests.ts @@ -0,0 +1,22 @@ +import get = require("get-value"); +const obj = { a: { b: { c: { d: "foo" } } } }; + +get(obj); +get(obj, "a"); +get(obj, "a.b"); +get(obj, "a.b.c"); +get(obj, "a.b.c.d"); + +{ + const isEnumerable = Object.prototype.propertyIsEnumerable; + const options: get.Options = { + isValid: (key, obj) => isEnumerable.call(obj, key) || typeof obj[key] === "string", + }; + + const obj = {}; + Object.defineProperty(obj, 'foo', { value: 'bar', enumerable: false }); + + get(obj, 'foo', options); + get({}, 'hasOwnProperty', options); + get({}, 'constructor', options); +} diff --git a/types/get-value/index.d.ts b/types/get-value/index.d.ts new file mode 100644 index 0000000000..70cf0286e7 --- /dev/null +++ b/types/get-value/index.d.ts @@ -0,0 +1,53 @@ +// Type definitions for get-value 3.0 +// Project: https://github.com/jonschlinkert/get-value +// Definitions by: Daniel Rosenwasser +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.4 + +export = get; + +declare function get(obj: T): T; +declare function get(obj: object, key: string, options?: get.Options): any; + +declare namespace get { + interface Options { + /** + * The default value to return when get-value cannot result a value from the given object. + * + * default: `undefined` + */ + default?: any; + /** + * If defined, this function is called on each resolved value. + * Useful if you want to do `.hasOwnProperty` or `Object.prototype.propertyIsEnumerable`. + */ + isValid?: (key: K, object: Record) => boolean; + /** + * Custom function to use for splitting the string into object path segments. + * + * default: `String.split` + */ + split?: (s: string) => string[]; + /** + * The separator to use for spliting the string. + * (this is probably not needed when `options.split` is used). + * + * default: `"."` + */ + separator?: string | RegExp; + /** + * Customize how the object path is created when iterating over path segments. + * + * default: `Array.join` + */ + join?: (segs: string[]) => string; + /** + * The character to use when re-joining the string to check for keys + * with dots in them (this is probably not needed when `options.join` is used). + * This can be a different value than the separator, since the separator can be a string or regex. + * + * default: `"."` + */ + joinChar?: string; + } +} diff --git a/types/get-value/tsconfig.json b/types/get-value/tsconfig.json new file mode 100644 index 0000000000..33aa3925c5 --- /dev/null +++ b/types/get-value/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "get-value-tests.ts" + ] +} diff --git a/types/get-value/tslint.json b/types/get-value/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/get-value/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }