From e28f0d59cffc61bd3d41c10563105e8adb868e59 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Mon, 19 Feb 2024 12:07:38 -0800 Subject: [PATCH] add types --- index.d.ts | 3 +++ index.js | 1 + package.json | 6 +++++- test/index.js | 1 + tsconfig.json | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 index.d.ts create mode 100644 tsconfig.json diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..7147b50 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,3 @@ +declare function isNegativeZero(number: unknown): number is -0; + +export = isNegativeZero; \ No newline at end of file diff --git a/index.js b/index.js index 400e5d1..bd5222e 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,6 @@ 'use strict'; +/** @type {import('.')} */ module.exports = function isNegativeZero(number) { return number === 0 && (1 / number) === -Infinity; }; diff --git a/package.json b/package.json index d0e23be..19f1b3c 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ }, "license": "MIT", "main": "index.js", + "types": "./index.d.ts", "scripts": { "prepack": "npmignore --auto --commentLines=autogenerated", "prepublishOnly": "safe-publish-latest", @@ -17,6 +18,7 @@ "tests-only": "nyc tape 'test/**/*.js'", "posttest": "aud --production", "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p .", "version": "auto-changelog && git add CHANGELOG.md", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" }, @@ -40,6 +42,7 @@ ], "devDependencies": { "@ljharb/eslint-config": "^21.1.0", + "@types/tape": "^5.6.4", "aud": "^2.0.4", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", @@ -47,7 +50,8 @@ "npmignore": "^0.3.1", "nyc": "^10.3.2", "safe-publish-latest": "^2.0.0", - "tape": "^5.7.5" + "tape": "^5.7.5", + "typescript": "next" }, "testling": { "files": "test/index.js", diff --git a/test/index.js b/test/index.js index 8fd7d16..d7b51c3 100644 --- a/test/index.js +++ b/test/index.js @@ -4,6 +4,7 @@ var test = require('tape'); var isNegativeZero = require('../'); test('not negative zero', function (t) { + // @ts-expect-error t.notOk(isNegativeZero(), 'undefined is not negative zero'); t.notOk(isNegativeZero(null), 'null is not negative zero'); t.notOk(isNegativeZero(false), 'false is not negative zero'); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..2002ce5 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": ["types"], /* Specify multiple folders that act like './node_modules/@types'. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 0, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + //"skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage" + ] +}