diff --git a/types/mkdirp/index.d.ts b/types/mkdirp/index.d.ts index db9f66c8ca..1ca2ad2993 100644 --- a/types/mkdirp/index.d.ts +++ b/types/mkdirp/index.d.ts @@ -1,14 +1,39 @@ -// Type definitions for mkdirp 0.5.1 +// Type definitions for mkdirp 0.5 // Project: https://github.com/substack/node-mkdirp // Definitions by: Bart van der Schoor // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// -declare function mkdirp(dir: string, cb: (err: NodeJS.ErrnoException, made: string) => void): void; -declare function mkdirp(dir: string, opts: any, cb: (err: NodeJS.ErrnoException, made: string) => void): void; +import fs = require('fs'); + +declare function mkdirp(dir: string, cb: (err: NodeJS.ErrnoException, made: mkdirp.Made) => void): void; +declare function mkdirp(dir: string, opts: mkdirp.Mode | mkdirp.Options, cb: (err: NodeJS.ErrnoException, made: mkdirp.Made) => void): void; declare namespace mkdirp { - function sync(dir: string, opts?: any): string; + type Made = string | null; + type Mode = number | string | null; + + interface FsImplementation { + mkdir: typeof fs.mkdir; + stat: typeof fs.stat; + } + + interface FsImplementationSync { + mkdirSync: typeof fs.mkdirSync; + statSync: typeof fs.statSync; + } + + interface Options { + mode?: Mode; + fs?: FsImplementation; + } + + interface OptionsSync { + mode?: Mode; + fs?: FsImplementationSync; + } + + function sync(dir: string, opts?: Mode | OptionsSync): Made; } export = mkdirp; diff --git a/types/mkdirp/mkdirp-tests.ts b/types/mkdirp/mkdirp-tests.ts index d17dff4e22..3c09001925 100644 --- a/types/mkdirp/mkdirp-tests.ts +++ b/types/mkdirp/mkdirp-tests.ts @@ -1,23 +1,17 @@ - import mkdirp = require('mkdirp'); -var str: string; -var num: number; -var opts = { - mode: num, - fs: {} -}; +mkdirp('str', (err, made) => { + const str: string = made; +}); +mkdirp('str', '0777', (err, made) => {}); +mkdirp('str', {}, (err, made) => {}); +mkdirp('str', { mode: '0777' }, (err, made) => {}); -mkdirp(str, num, (err, made) => { - str = made; -}); -mkdirp(str, opts, (err, made) => { - str = made; -}); -mkdirp(str, (err, made) => { - str = made; -}); +// $ExpectType string +mkdirp.sync('str'); +mkdirp.sync('str', '0777'); +mkdirp.sync('str', {}); +mkdirp.sync('str', { mode: '0777' }); -str = mkdirp.sync(str, num); -str = mkdirp.sync(str, opts); -str = mkdirp.sync(str); +// $ExpectError +mkdirp.sync('str', { mode: '0777', fs: {} }); diff --git a/types/mkdirp/tslint.json b/types/mkdirp/tslint.json index a41bf5d19a..f93cf8562a 100644 --- a/types/mkdirp/tslint.json +++ b/types/mkdirp/tslint.json @@ -1,79 +1,3 @@ { - "extends": "dtslint/dt.json", - "rules": { - "adjacent-overload-signatures": false, - "array-type": false, - "arrow-return-shorthand": false, - "ban-types": false, - "callable-types": false, - "comment-format": false, - "dt-header": false, - "eofline": false, - "export-just-namespace": false, - "import-spacing": false, - "interface-name": false, - "interface-over-type-literal": false, - "jsdoc-format": false, - "max-line-length": false, - "member-access": false, - "new-parens": false, - "no-any-union": false, - "no-boolean-literal-compare": false, - "no-conditional-assignment": false, - "no-consecutive-blank-lines": false, - "no-construct": false, - "no-declare-current-package": false, - "no-duplicate-imports": false, - "no-duplicate-variable": false, - "no-empty-interface": false, - "no-for-in-array": false, - "no-inferrable-types": false, - "no-internal-module": false, - "no-irregular-whitespace": false, - "no-mergeable-namespace": false, - "no-misused-new": false, - "no-namespace": false, - "no-object-literal-type-assertion": false, - "no-padding": false, - "no-redundant-jsdoc": false, - "no-redundant-jsdoc-2": false, - "no-redundant-undefined": false, - "no-reference-import": false, - "no-relative-import-in-test": false, - "no-self-import": false, - "no-single-declare-module": false, - "no-string-throw": false, - "no-unnecessary-callback-wrapper": false, - "no-unnecessary-class": false, - "no-unnecessary-generics": false, - "no-unnecessary-qualifier": false, - "no-unnecessary-type-assertion": false, - "no-useless-files": false, - "no-var-keyword": false, - "no-var-requires": false, - "no-void-expression": false, - "no-trailing-whitespace": false, - "object-literal-key-quotes": false, - "object-literal-shorthand": false, - "one-line": false, - "one-variable-per-declaration": false, - "only-arrow-functions": false, - "prefer-conditional-expression": false, - "prefer-const": false, - "prefer-declare-function": false, - "prefer-for-of": false, - "prefer-method-signature": false, - "prefer-template": false, - "radix": false, - "semicolon": false, - "space-before-function-paren": false, - "space-within-parens": false, - "strict-export-declare-modifiers": false, - "trim-file": false, - "triple-equals": false, - "typedef-whitespace": false, - "unified-signatures": false, - "void-return": false, - "whitespace": false - } + "extends": "dtslint/dt.json" }