falso icon indicating copy to clipboard operation
falso copied to clipboard

Why can toCollection return a non-array?

Open dmitriybo opened this issue 2 years ago • 3 comments

Description

In my opinion, the toCollection method should always return an array (if it does not passed length, then length = 1). The reason for this is very simple: toCollection is used to generate an array of elements. If for some reason you think otherwise, then at least make the correct typing. Currently toCollection always returns the type Collection | Collection[], but should return Collection[] if length is passed.

image

The example in the specification also needs to be improved:

image

Proposed solution

No response

Alternatives considered

No response

Do you want to create a pull request?

No

dmitriybo avatar Sep 25 '23 15:09 dmitriybo

Came to post this same suggestion +1. toCollection to always return an array.

Suggestion Solution toCollection() returns array with default length of 3

labeled avatar Nov 22 '23 15:11 labeled

Is anyone working on this? seems like a simple fix, I don't mind taking it on, just set the type to return array only right? I think it's ok to return an array of 1 by default even, what's the point of using this function to return just an object??

tayambamwanza avatar May 05 '24 08:05 tayambamwanza

The type here could just be improved to reflect the runtime behavior: https://github.com/ngneat/falso/blob/bd15cc88c98fa37778f2f8ce1b6f199278d3c0ed/packages/falso/src/lib/collection.ts#L21-L27

If options arg is passed with the length property, the return type should be an array, else it will be an object. That can be achieved with the following code:

export declare function toCollection<Collection = never, Options extends FakeOptions = never>(generateCollection: (options?: Options) => Collection, options?: Options): Options extends {length: number} ? Collection[]: Collection;

predragnikolic avatar Jul 24 '24 10:07 predragnikolic