From 2b15f2ee7eeba7147c75a24d71042ee996966c92 Mon Sep 17 00:00:00 2001 From: pomali Date: Sun, 3 Mar 2024 11:12:17 +0100 Subject: feat(helpers)!: stricter checking for function signature passed to `multiple` (#2563) Co-authored-by: ST-DDT Co-authored-by: Matt Mayer <152770+matthewmayer@users.noreply.github.com> --- docs/guide/upgrading_v9/2563.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 docs/guide/upgrading_v9/2563.md (limited to 'docs/guide') diff --git a/docs/guide/upgrading_v9/2563.md b/docs/guide/upgrading_v9/2563.md new file mode 100644 index 00000000..da770de9 --- /dev/null +++ b/docs/guide/upgrading_v9/2563.md @@ -0,0 +1,38 @@ +### Stricter checking for function signature passed to `faker.helpers.multiple` method + +The `faker.helpers.multiple` method takes a function reference as its first parameter. Previously you may have written code like this to generate multiple values. + +```ts +faker.helpers.multiple(faker.date.past, { count: 2 }); +``` + +However this code has a bug - `faker.helpers.multiple` passes the loop index as the second parameter to the method, which in this case would set the `refDate` of the `faker.date.past()` call to 0, making all dates before 1970. + +Instead you should generally use a lambda function like + +```ts +faker.helpers.multiple(() => faker.date.past(), { count: 2 }); +``` + +to get the desired behavior. In v9.0, we use stricter type-checking in Typescript to detect when a function is called which is not compatible with `(v: unknown, index: number)` which can cause compile-time errors in places where previously there were potential runtime errors. + +**Bad** + +```ts +faker.helpers.multiple(faker.person.firstName, ...); // ❗ +// In Typescript, this is now a compile time error +// Argument of type '(sex?: "female" | "male" | undefined) => string' +// is not assignable to parameter of type '(v: unknown, index: number) => unknown'. +``` + +**Good** + +```ts +faker.helpers.multiple(() => faker.person.firstName(), ...); // ✔ +``` + +The new types also allow for easier use-cases where the index is part of the generated data e.g. as id. + +```ts +faker.helpers.multiple((_, index) => ({ id: index, ...}), ...); // [{id: 0, ...}, ...] +``` -- cgit v1.2.3