microsoft/TypeScript

TypeScript 5.5 Iteration Plan

DanielRosenwasser opened this issue Β· 68 comments

This document outlines our focused tasks for TypeScript 5.5. It minimally indicates intent to investigate tasks or contribute to an implementation. Nothing is set in stone, but we will strive to complete these tasks in a reasonable timeframe.

Date Event
2024-03-05 TypeScript 5.4 Release
2024-04-19 Create 5.5 Beta (5.5.0) Build for Testing
2024-04-24 TypeScript 5.5 Beta Release
2024-05-31 Create 5.5 RC (5.5.1) Build for Testing
2024-06-04 TypeScript 5.5 RC Release
2024-06-14 Create 5.5 Final (5.5.2) Build for Testing
2024-06-18 TypeScript 5.5 Final Release πŸš€
gantt
    dateFormat  YYYY-MM-DD
    TypeScript 5.4 Stabilization Period : 2024-02-16, 2024-03-05
    TypeScript 5.5 Beta Development : 2024-02-16, 2024-04-19
    TypeScript 5.5 RC Development : 2024-04-20, 2024-05-31
    TypeScript 5.5 Stabilization Period : 2024-06-01, 2024-06-18
todayMarker stroke-width:5px,stroke:#0f0,opacity:0.5
Loading

Compiler and Language

Editor and Language Service

Performance

Website and Docs

Infrastructure

  • Adopt --isolatedDeclarations and Parallelize TypeScript's Build

How much of an impact will --isolatedDeclarations have on type checking performance in large projects?

None directly, in the same way that isolatedModules doesn't speed things up in and of itself.

But, if you have code which passes isolatedModules, it can be safely transpiled by an external tool (like Babel, esbuild, swc). And similarly, code passing isolatedDeclarations can be transpiled into a declaration file by an external tool too (once one exists).

(This isn't to say that there can't be some speedups possible in TypeScript in the future enabled by this option, just that the flag itself is intended to just be checks.)

Hey everyone, any chance of getting #26242 in this release? It was proposed back in 2018 and there has not been much work on the issue up to this point. Getting it at least planned would already be amazing to the TS community. I believe it would substantially improve the power of TS in the long run!

Just a heads up, I'm working on remaking the website using Sveltekit. Styles will be the same, but the overall structure will be simpler and much quicker to iterate on.

@ClearedFram3 while I don't want to discourage experimentation, I don't think we would accept such a large PR without discussing changes ahead of time.

@DanielRosenwasser I should've said the codebase structure will be differentβ€”the website style/content structure will be the same. After the current codebase is replaced, there will ample room for discussion about changing design and content or even to a different framework haha.

I’ve been watching the iteration plan threads from 5.4 seeing my PR (#55600) on the list. I am on standby anytime for any necessary alternations.

Is there anything Typescript community members can do to influence this list?

I think I can speak for every TS React dev on the planet when I say that #29526 (improved syntax for destructuring an argument ... like the React props argument) has languished long enough. The community has essentially reached a consensus on a desired syntax in that ticket (something that was not easy), and now all that's needed is developer will to implement.

I can't speak for anyone else, but personally I would trade everything on the 5.5 list for this one feature!

A question about Investigate Recursive Object Type References
Will it help i.e. in zustand in avoiding writing interface for the state, and instead just infer the type from the initial state (create-function argument)?

Is there any chance after 10 years.. to introduce nameof?

Is it super complicated? Honest question

#1579

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
bump release-5.4 βœ… Started βœ… Results

Hey, @DanielRosenwasser! I've set the version of release-5.4 to 5.4.4 for you.

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
bump release-5.4 βœ… Started βœ… Results

Whoops - I've been posting in the wrong iteration plan. Sorry for the noise folks.

Hey, @DanielRosenwasser! I've set the version of release-5.4 to 5.4.5 for you.

I think I can speak for every TS React dev on the planet when I say that #29526 (improved syntax for destructuring an argument ... like the React props argument) has languished long enough.

I can't disagree more with all existing proposals in #29526. It will make TypeScript syntax very confusing.

TypeScript will make people's code type-safe. TypeScript will not make people's code confusing. All existing proposals are confusing.

Personally, I treat the parameter destructuring syntax as an anti-pattern. It's already a confusing shorthand syntax that looks like something half-done when you only rename a subset of the properties. Now they're proposing old:new:Type and old::string, etc to make it even more confusing. Optional rename in the middle? NO! No one will intuitively know that string here is to mark the old name as string! What were they doing!?

Without it, the problem of working with the destructing syntax can already be solved by extracting those in-place object types into standalone types or interfaces. It might be tedious for some, but at least it's NOT confusing, at all!

With any of those existing proposals, it will be really, really confusing. And you need to introduce a set of new rules. It does not solve any hard problems.

Not to make anyone feel bad. But it's important to consider different voices. TypeScripts will be fine without it.

Sincerely, and thanks for your reading.

I think I can speak for every TS React dev on the planet when I say that #29526 (improved syntax for destructuring an argument ... like the React props argument) has languished long enough.

I can't disagree more with all existing proposals in #29526. It will make TypeScript syntax very confusing.

This is the first I am hearing about this.. (I guess I've had my head in the sand for a while).. We already have a solution to this.. ({ a, b }: SomeType) => void.. This makes sense, and already works..
This sounds like a massive problem waiting to happen if this gets implemented the way people are saying.

This type of stuff is going to push the whole "Javascript can run TS script directly, but just ignoring the types" concept even FURTHER AWAY!
It seems like shooting yourself in the foot to try and solve something that is already solved.

But it's important to consider different voices.

Then why not add your voice to that issue? Respond to the arguments and examples presented there, there.

This type of stuff is going to push the whole "Javascript can run TS script directly, but just ignoring the types" concept even FURTHER AWAY!

Again, if you join the actual discussion you can respond to people who are addressing this exact concern (#29526 (comment)). The only argument I see in that issue is that the double-colon syntax may actually benefit this cause. If there's an argument to the contrary, you should make it there so it can be properly considered.

We already have a solution to this.. ({ a, b }: SomeType) => void

Most devs believe in the "DRY principle". When you use the syntax you mentioned, it's not DRY code; you have ({ a, b }: {a: someType; b:someType) => void (where a and b are needlessly repeated).

#29526 is simply about eliminating duplication, nothing more. There are already 30+ devs participating in that discussion (and who knows how many are lurking), all because they want to see that duplication eliminated.

If you have something against eliminated duplication, by all means respond ... in that ticket. This thread is not the appropriate place to discuss any particular ticket.

For anyone here for the iteration plan: we are going to push the beta out about a week to make sure we can bring in some scheduled work.

@typescript-bot create release-5.5

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
create release-5.5 ❌ Error: HttpError: Unexpected inputs provided: ["core_tag"] - https://docs.github.com/rest/actions/workflows#create-a-workflow-dispatch-event

Jake says he fixed it. @typescript-bot tell @jakebailey thank you and also

@typescript-bot create release-5.5

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
create release-5.5 βœ… Started ❌ Results

Hey, @DanielRosenwasser! I was unable to create the new release branch.

Check the logs at: https://github.com/microsoft/TypeScript/actions/runs/8812429335

Surely there is a better way to interact with a bot than to have multiple people emailed about every request and then every response?

@WORMSS but you can disable notifications for this thread, if you don't want to be notified about new activity.
The bot exists to help contributors, who do want to get notified about messages from the bot.

I don't mind getting notifications.. don't want to get a notification about people talking TO the bot..

GitHub doesn't provide such a feature. And I don't understand your complaint, it is just a minor inconvenience for you, but a big help for contributors.

for anyone founding their .d.ts file augmentation no longer working (a breaking change not mentioned in the blog), see #58324

@typescript-bot sync release-5.5

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
sync release-5.5 βœ… Started βœ… Results

Hey, @DanielRosenwasser! I've pulled main into release-5.5 for you.

@typescript-bot bump release-5.5

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
bump release-5.5 βœ… Started βœ… Results

Hey, @DanielRosenwasser! I've set the version of release-5.5 to 5.5.1-rc for you.

2024-06-04 TypeScript 5.5 RC Release

There will no 5.5.1-rc on NPM?
https://www.npmjs.com/package/typescript?activeTab=versions

Only 5.5.0-beta until 5.5.2 is released?

Hey all, my apologies on the delays - that's mostly on me, but as always, I'll note that the schedule is aspirational and not a promise on exact dates.

5.5.1-rc is now on npm - the blog post and the tagged release will be out on GitHub soon. Thanks for your patience!

The blog post is out for the RC, as is the git tag v5.5-rc (and GitHub release).

The RC got pushed back 2 days (June 6th) (typical) so the stable release will go out 2 days later (June 20th) (typical).

@typescript-bot bump release-5.5

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
bump release-5.5 βœ… Started βœ… Results

Hey, @DanielRosenwasser! I've set the version of release-5.5 to 5.5.2 for you.

Property 'once' does not exist on type 'EventEmitter'. Did you mean to access the static member 'EventEmitter.once' instead?

I am get this error after update to 5.5.2? My code has not change. How fix?

Pls fix

@Anonymous4078 if you are having problems and you believe you're hitting a bug, please file a separate issue. Otherwise, if you just have an upgrade question, try asking on StackOverflow or on our Discord chat.

Was 5.5.2 withdrawn?
I can not find it on nuget.org anymore and it crashes IntelliSense in my VS2022 Version 17.10.3 (on 4 machines)

@HolgerJeromin yes, there was an issue with the NuGet package due to changes in the internal layout for TypeScript. @joj and others are investigating that.

@DanielRosenwasser What is the status of the LSP support in this release? I see it in the iteration plan to "define an initial sketch" but there's nothing about it in the release notes. Are we any closer to getting it?

These iteration plans are only a prospective list; in this case I had other critical work that preempted me working on anything tangible for LSP.

What use case do you have where LSP would be valuable?

@jakebailey We met with Daniel a few months ago to discuss our project. It's a TypeScript-based DSL with a custom file extension for which we need to implement our own VS Code extension. Our DSL is a subset of TypeScript so we need to disallow certain things and provide custom completions, etc. We implemented some of this as a tsserver plugin, but we don't want our customers to have tsconfig.json files in their projects. We don't intend to provide any of the same configuration options you get with a tsconfig.json. We have our own config file. We want them to simply install the VS Code extension and for everything to work.

It is possible to load a tsserver plugin inside a VS Code extension without requiring the user to have a tsconfig.json, but since there is only one instance of tsserver running at a time in VS Code, this plugin would then be active for all of the user's TypeScript files unless they disable the extension.

Our options are thus: (A) Fork the internal typescript-language-features extension, (B) implement an extension from scratch using a community-developed LSP wrapper like vtsls, or (C) implement an extension from scratch using tsserver directly with our own LSP adapter layer.

I don't really see how LSP would help that situation; LSP will within reason only change the way tsserver talks to the editor. It'd still be the same ProjectService under the hood, with the same gotchas. What you're describing sounds more suited to plugging into something like volar, the system that vue, mdx, etc, use to slap their custom languages on top of TS. (Not that I have any experience with it, or that it's supported by TS in any way.)

In any case, I think this is the wrong place to discuss it (pinging everyone interested in the 5.5 release process); the update is just that "I didn't have time to work on it". The current LSP thinking is to slowly onboard calls away from the old protocol onto the new one, so it's not going to be like one day we aren't LSP and one day we are, either.

@typescript-bot bump release-5.5 and LKG

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
bump release-5.5 and LKG βœ… Started βœ… Results

Hey, @DanielRosenwasser! I've set the version of release-5.5 to 5.5.3 for you.

5.5.3 is out with the NuGet/VS issues fixed. Thanks for your patience everyone!

Will #26242 be implemented in the next version, as it is so important to library developers?

@typescript-bot bump release-5.5 and LKG

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
bump release-5.5 and LKG βœ… Started βœ… Results

Hey, @DanielRosenwasser! I've set the version of release-5.5 to 5.5.4 for you.

Is there any reference link for Improved Performance for Git Branch Switching Scenarios? @DanielRosenwasser Thank you!