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

5.3: const-like inference of arrays no longer requires readonly modifier #57217

Closed
conorbrandon opened this issue Jan 29, 2024 · 3 comments
Closed

Comments

@conorbrandon
Copy link

conorbrandon commented Jan 29, 2024

🔎 Search Terms

5.3 const type parameter const like array readonly

🕗 Version & Regression Information

EDIT: replace my unintuitive attempt at indicating a range of versions for clarity - This changed between versions 5.0.4, 5.1.6, 5.2.2 and 5.3.3, 5.4.0-dev.20240129

  • This changed between versions 5.2.2 and 5.3.3

⏯ Playground Link

https://www.typescriptlang.org/play?ts=5.3.3#code/MYewdgzgLgBADgJwKYDcCWICuEBCSAWAhuiAjALwwA8oksAKjEgB5RJgAmEMyhH4AGwCeMaAjRgA5gG0AugD4AFFABcMegEoK8mFADcAKFrRdSaAAVkJbBXhWM2PERIJF0gEQAzECHeyNhgD0gTChMAB6APwGRuAmYEgA7k7EGGSUNHEMTKzsXKJQ4lJySqrqWuQ6+rF0ptAAckm2CckEqaRuXj5+AQbBYRGRQA

💻 Code

const previousBehavior = <const T extends readonly string[]>(t: T) => t;
const testPrevious = previousBehavior(["foo"]);
//    ^?

const newBehavior = <const T extends string[]>(t: T) => t;
const testNew = newBehavior(["foo"]);
//    ^?

🙁 Actual behavior

newBehavior is able to infer t as ["foo"] on 5.3+.

🙂 Expected behavior

I would expect newBehavior to infer t as string[] as it did on previous versions and a readonly modifier must be used to infer ["foo"] (well, technically, readonly ["foo"]), as is mentioned is required on the pull request and announcement that introduced this feature.

Additional information about the issue

I'm curious if this is expected behavior and can be relied upon in future versions. Thanks!

@MartinJohns
Copy link
Contributor

This changed between versions 5.0.4, 5.1.6, 5.2.2 and 5.3.3, 5.4.0-dev.20240129

I'm having a hard time believing it really changed between each of these versions.

@fatcerberus
Copy link

The change was intentional: #55229

@conorbrandon
Copy link
Author

Thank you for the quick reply and apologies for the duplicate issue. Feeling silly my search terms didn't find #57107, removing "5.3" from the search terms finds it🤦.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants