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.
Officially, here's the plan:
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.release-3.4
branch with any feedback we receive.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.release-3.4
branch with any feedback we receive.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
--build
mode) πJSX
namespace--declaration
with --allowJs
const
contextsreadonly
type modifier for arrays/tuples.d.ts
consumption for older versionsdts-lint
) - how do you "expect" different displays of the same semantic type.globalThis
--declaration
with --allowJS
--watch
mode without a resident process.Jakefile.js
π’ and moving to Gulp--build
APIs--build
more integrated with Webpack, Rollup, gulp, and any other build tool integration.You have globalThis under _Expected Work Items_ and _Deferred Work Items_.
@j-oliveras it's still March, give me a break.
Negated types
Can this model control-flow narrowing?
I think this paper is _very_ related: https://pnwamk.github.io/docs/sstot.pdf.
Can I ask about the status of #26797 as a work item? It's tagged for the 3.4 release but not mentioned here. It's been open six months now and has gathered many positive reactions (currently 4th most π'd and β€οΈ'd open PR and I think the other three are all covered here).
It was also previously tagged for the 3.3 release, and the the 3.2 release before that. It seems like this one will forever be in the 'next' release πΏ
I hope the Higher order function type inference merge makes it!
I think this paper is very related
I actually already have a branch that uses them for control flow; however I need to work on somehow making intersection construction less costly - as a truthyness check on a big union can become hugely expensive once truthiness is tested for via negations. :(
Can I ask about the status of #26797 as a work item?
Last time I brought it to the table (or rather, in office discussion), we've discussed we need to take it in one of two ways to land it with confidence:
Forbid instantiable types in key positions. This is mostly because we lack confidence in the higher order behavior of the new index signatures, and how they interact with things like conditionals and generics.
Merge non-homomorphic mapped types and index signatures into a single concept. Conceptually, once indexes are open ended in terms of type, the only difference between an index signature and a mapped type _should_ be the presence (or lack thereof) of a template. (And the fact that multiple mappings should be definable within the same type) By merging them and showing that things aren't too broken, we can be relatively sure that the relationships are good (since mapped types work pretty OK).
The first can be done pretty quickly (it's just an added grammar error), but is definitely lacking, IMO. The second is going to take some more effort. Since I'm a fan of full and complete fixes, I started work on the second (which is quite troublesome - there's actually a bunch of places where higher order mapped types don't behave quite right and they really stick out when you try to apply them to nongeneric types for index-like constructs; so finding the right middle ground between breakiness and correctness is desirable) but with the impending release, swapped to fixing a bunch of bugs, so we'd have a slightly less buggy release :3
For anyone watching it: sorry for letting it slip guys, but I _am_ still working on it and it hasn't been abandoned. In fact, it's considered a prerequisite PR for negated types to land (since a primary use as involves negated index signature types to limit the scope of an index to keys not explicitly defined), so it's definitely still something I'm on. You'll probably see my work on it ramp back up after we ship 3.4 proper in two or so weeks.
Most helpful comment
@j-oliveras it's still March, give me a break.