This document outlines our focused tasks for TypeScript 3.4, as well as some of the discussion that explains how/why we prioritized certain work items. Nothing is set in stone, but we will strive to complete them in a reasonable timeframe.
Dates
Officially, here's the plan:
- March 8th (12pm Pacific): Create a
release-3.4 branch, and update the version to 3.4.0-rc. master is locked from receiving new feature-work that is not 3.4-bound.
- Start a build of TypeScript for Visual Studio for our remote testing team.
- March 13th (12pm Pacific): Last day to adjust the
release-3.4 branch with any feedback we receive.
- Kick off a final Visual Studio build if necessary.
- Produce an insiders release for VS Code.
- Morning of March 14th: The release candidate goes out.
- March 22nd (12pm Pacific): Merge
master into release-3.4 one last time, finalize the version as 3.4.1. master is unlocked. Critical changes for 3.4 must be ported in.
- Start a build of TypeScript for Visual Studio for our remote testing team.
- March 27th (12pm Pacific): Last day to adjust the
release-3.4 branch with any feedback we receive.
- Kick off a final Visual Studio build if necessary.
- Produce an insiders release for VS Code.
- March 28th: Announcing TypeScript 3.4 π
Conclusions
How to read this:
| Symbol |
Meaning |
| β
|
Work item is done |
| ππ»βοΈ |
Work item is in progress |
| ππ |
Work item is in review |
| π€ |
Work item is in speculative planning phase |
Expected Work Items
- Language
- Compiler
- Language service
- Infrastructure
- Benchmarking infrastructure β
- Moving builds to Gulp β
- DefinitelyTyped infrastructure β
- Automated testing language service infrastructure for real world code π€
- ESLint parity with TSLint for semantic checking π
Deferred Work Items
Planning Meeting Notes
Motivations
- Goals and current 6-month roadmap
- GitHub user feedback (πs)
- Feedback from customer interviews and social media.
- Visual Studio and Visual Studio Code feedback and new functionality demands
- Actionable PRs (need to make a call)
- Bug backlog
Discussion
General (compiler/infrastructure/reliability)
- Partial type argument inference
- Current designs have issues, and not enough consensus on team for proposed solutions.
- Declared as on-hold.
- β
const contexts
- Better inference through return types
- Propagation of uninferred generics
readonly type modifier for arrays/tuples
- Merged, but...
- Appears to be a large breaking change
- breaks
.d.ts consumption for older versions
- issues with current consumers of displayed types (e.g.
dts-lint) - how do you "expect" different displays of the same semantic type.
- Needs investigation on workarounds.
- Negated types
- PR out (WIP)
- Open questions:
- Can this model control-flow narrowing?
- If so, does this lead to reasonable user experiences?
- β
globalThis
--declaration with --allowJS
- Want to, but probably not 3.4-bound given high bug count.
- β
- Private fields
- Still want to wait on stage 4.
- Types publisher infrastructure for DefinitelyTyped
- Performance infrastructure
- Faster incremental cold builds by creating a "digest" file
- "Pick-up-where-you-left-off" builds
--watch mode without a resident process.
- β
- Getting rid of
Jakefile.js π’ and moving to Gulp
- Consolidate on more modern tooling
- Gulp 4 has an easier API
- Potentially faster builds using watch mode
- β
- JSX Factory decoupling
- Pros: High π count, language expressivity, strongly-types JSX Element expressions
- Cons: Can break the world for re-assignments of JSX elements, can create big trees of types, and leaks details about APIs.
- This can break API consumers ππ₯
- Until we have a perf mitigation here, it's stuck. β
- Composite project/
--build APIs
- Provides value to API consumers and makes
--build more integrated with Webpack, Rollup, gulp, and any other build tool integration.
- Potentially an experimental API for 3.4, but work will definitely accrue to something in 3.5 (at latest) with a stable API.
- β
- Automated testing infrastructure
- Earlier way to validate against real world codebases on GitHub
- Part of this is that our own dog-fooding (πΆπ°) doesn't reflect the sort of code our users always do.
- Investigating leveraging existing infrastructureto crawl external codebases and run language service operations on them.
- π€
- Compiler plugin API
- Minification is one of the most-demanded issues of all time.
- We can't provide it, but we want to enable more tooling to leverage TypeScript APIs
- Experimenting with a prototype for a new printer that can take care of basics, APIs to inject transforms into the tree from an invocation of tsc.
- Entirely investigative, and depends on partner teams being able to utilize it - no clue if this will land in a stable release.
- π
- High bug count
Productivity
- Refactor to named parameters
- High positive feedback on issue tracker
- β
- Smart select API
- Accrue value to VS Code and other consuming editors.
- β
- Convert to arrow function/vice versa
- Class components to function components?
- Seems pretty React-specific.
- β can't be prioritized for 3.4
This document outlines our focused tasks for TypeScript 3.4, as well as some of the discussion that explains how/why we prioritized certain work items. Nothing is set in stone, but we will strive to complete them in a reasonable timeframe.
Dates
Officially, here's the plan:
release-3.4branch, and update the version to3.4.0-rc.masteris locked from receiving new feature-work that is not 3.4-bound.release-3.4branch with any feedback we receive.masterintorelease-3.4one last time, finalize the version as3.4.1.masteris unlocked. Critical changes for 3.4 must be ported in.release-3.4branch with any feedback we receive.Conclusions
How to read this:
Expected Work Items
constcontexts βreadonlytuple/array type modifiers βglobalThisβ--buildmode) πDeferred Work Items
JSXnamespace--declarationwith--allowJsPlanning Meeting Notes
Motivations
Discussion
General (compiler/infrastructure/reliability)
constcontextsreadonlytype modifier for arrays/tuples.d.tsconsumption for older versionsdts-lint) - how do you "expect" different displays of the same semantic type.globalThis--declarationwith--allowJS--watchmode without a resident process.Jakefile.jsπ’ and moving to Gulp--buildAPIs--buildmore integrated with Webpack, Rollup, gulp, and any other build tool integration.Productivity