diff --git a/package.json b/package.json index cee2108..8464080 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,11 @@ "types": "./dist/utils.d.ts", "import": "./dist/utils.mjs", "default": "./dist/utils.js" + }, + "./new-array": { + "types": "./dist/new-array.d.ts", + "import": "./dist/new-array.mjs", + "default": "./dist/new-array.js" } }, "keywords": [], diff --git a/readme.md b/readme.md index 65aa2c3..b68088d 100644 --- a/readme.md +++ b/readme.md @@ -262,6 +262,20 @@ const validate = (input: unknown) => { }; ``` +### Make `new Array()` return `unknown[]` + +With `new Array()` you can introduce `any`'s into your code: + +```ts +import "@total-typescript/ts-reset/new-array"; + +const arr = new Array(); // unknown[] + +const arr2 = new Array(10); // length is 10, but the type is unknown[] + +const inferred = new Array(1, 2, 3); // number[] +``` + ## Rules we won't add ### `Object.keys`/`Object.entries` diff --git a/src/entrypoints/new-array.d.ts b/src/entrypoints/new-array.d.ts new file mode 100644 index 0000000..08a963b --- /dev/null +++ b/src/entrypoints/new-array.d.ts @@ -0,0 +1,4 @@ +interface ArrayConstructor { + new (arrayLength?: number): unknown[]; + (arrayLength?: number): unknown[]; +} diff --git a/src/entrypoints/recommended.d.ts b/src/entrypoints/recommended.d.ts index 6eabca1..a7e813b 100644 --- a/src/entrypoints/recommended.d.ts +++ b/src/entrypoints/recommended.d.ts @@ -4,3 +4,4 @@ /// /// /// +/// diff --git a/src/tests/new-array.ts b/src/tests/new-array.ts new file mode 100644 index 0000000..c2fe22c --- /dev/null +++ b/src/tests/new-array.ts @@ -0,0 +1,22 @@ +import { doNotExecute, Equal, Expect } from "./utils"; + +doNotExecute(() => { + // check that new array is inferred correctly to unknown[] + const unknownArr = new Array(); + + type tests = [Expect>]; +}); + +doNotExecute(() => { + // array with length property + const unknownArr = new Array(10); + + type tests = [Expect>]; +}); + +doNotExecute(() => { + // array with items + const numberArray = new Array(1, 2); + + type tests = [Expect>]; +});