Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make fc.constantFrom use const generics #4047

Open
TomerAberbach opened this issue Jul 9, 2023 · 7 comments
Open

Make fc.constantFrom use const generics #4047

TomerAberbach opened this issue Jul 9, 2023 · 7 comments

Comments

@TomerAberbach
Copy link
Sponsor Contributor

🚀 Feature Request

- declare function constantFrom<T = never>(...values: T[]): Arbitrary<T>;
+ declare function constantFrom<const T = never>(...values: T[]): Arbitrary<T>;

Motivation

Right now fc.constantFrom('a', 'b', 'c') returns Arbitrary<string>, which is a bit inconvenient because often the reason you are using fc.constantFrom in the first place is that you need the specific type represented by the constants. You can fix this by writing fc.constantFrom<'a' | 'b' | 'c'>('a', 'b', 'c'), but that requires duplicating the constants between the types and the values. const generics solve this problem.

Example

TS Playground

@dubzzz
Copy link
Owner

dubzzz commented Jul 10, 2023

It might be a great thing to do for a next major 🤔 Doing that in the current one would mean break the official compatibility with TS and force users to bump to 5.0 or above. We can already create the PR and wait for a next major to be ready to merge it (I already have one queued PR with breaking).

@TomerAberbach
Copy link
Sponsor Contributor Author

Sounds good! Did you want me to make the PR? Or were you planning on doing it?

@dubzzz
Copy link
Owner

dubzzz commented Jul 17, 2023

As you want.

Note: I think a next major will come soon even if it will not bring that much into fast-check: it will help me to change some internal (but exposed) APIs such as IProperty.

dubzzz added a commit that referenced this issue Jul 24, 2023
As recommended by #4047, let's leverage const generics to make usage of `constantFrom` even simpler for TS users.
@TomerAberbach
Copy link
Sponsor Contributor Author

Thanks for moving ahead with this!

dubzzz added a commit that referenced this issue Nov 23, 2023
As recommended by #4047, let's leverage const generics to make usage of `constantFrom` even simpler for TS users.
@dubzzz
Copy link
Owner

dubzzz commented Nov 28, 2023

It will be part of v4. I'm currently stacking PRs to have it ready in the coming weeks/months. I might do some new minors in-between to properly advertise new APIs and deprecate old ones.

dubzzz added a commit that referenced this issue Jan 2, 2024
As recommended by #4047, let's leverage const generics to make usage of `constantFrom` even simpler for TS users.
@seansfkelley
Copy link

This is a helpful change, thanks! Can you give the same treatment to constant?

dubzzz added a commit that referenced this issue May 16, 2024
As recommended by #4047, let's leverage const generics to make usage of `constantFrom` even simpler for TS users.
dubzzz added a commit that referenced this issue May 17, 2024
As recommended by #4047, let's leverage const generics to make usage of `constantFrom` even simpler for TS users.
dubzzz added a commit that referenced this issue May 17, 2024
As recommended by #4047, let's leverage const generics to make usage of `constantFrom` even simpler for TS users.
@dubzzz
Copy link
Owner

dubzzz commented May 17, 2024

@seansfkelley Just opened a PR with our suggestion for constant. Same thing as for constantFrom, it will have to wait v4. And this time I hope to be able to publish it soon (1-2 months is my target).

-> #4999

dubzzz added a commit that referenced this issue May 21, 2024
**Description**

As recommended by #4047,
let's leverage const generics to make usage of `constant` even simpler
for TS users.

Not really a breaking change on its own but given we play with types and
change the way we declare some, let's be safe and pack this change with
other "next major" devs.

<!-- Please provide a short description and potentially linked issues
hustifying the need for this PR -->

<!-- * Your PR is fixing a bug or regression? Check for existing issues
related to this bug and link them -->
<!-- * Your PR is adding a new feature? Make sure there is a related
issue or discussion attached to it -->

<!-- You can provide any additional context to help into understanding
what's this PR is attempting to solve: reproduction of a bug, code
snippets... -->

**Checklist** — _Don't delete this checklist and make sure you do the
following before opening the PR_

- [x] The name of my PR follows [gitmoji](https://gitmoji.dev/)
specification
- [x] My PR references one of several related issues (if any)
- [x] New features or breaking changes must come with an associated
Issue or Discussion
- [x] My PR does not add any new dependency without an associated Issue
or Discussion
- [x] My PR includes bumps details, please run `yarn bump` and flag the
impacts properly
- [x] My PR adds relevant tests and they would have failed without my PR
(when applicable)

<!-- More about contributing at
https://github.com/dubzzz/fast-check/blob/main/CONTRIBUTING.md -->

**Advanced**

<!-- How to fill the advanced section is detailed below! -->

- [x] Category: 🏷️ Add or update types
- [x] Impacts: Typings

<!-- [Category] Please use one of the categories below, it will help us
into better understanding the urgency of the PR -->
<!-- * ✨ Introduce new features -->
<!-- * 📝 Add or update documentation -->
<!-- * ✅ Add or update tests -->
<!-- * 🐛 Fix a bug -->
<!-- * 🏷️ Add or update types -->
<!-- * ⚡️ Improve performance -->
<!-- * _Other(s):_ ... -->

<!-- [Impacts] Please provide a comma separated list of the potential
impacts that might be introduced by this change -->
<!-- * Generated values: Can your change impact any of the existing
generators in terms of generated values, if so which ones? when? -->
<!-- * Shrink values: Can your change impact any of the existing
generators in terms of shrink values, if so which ones? when? -->
<!-- * Performance: Can it require some typings changes on user side?
Please give more details -->
<!-- * Typings: Is there a potential performance impact? In which cases?
-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants