Skip to content

TypeScript Roadmap: January - June 2021 #42673

Closed
@DanielRosenwasser

Description

@DanielRosenwasser

Roadmap Overview

This roadmap is meant to give our team and users clarity over our priorities over the next year. It's meant more as a set of guidelines than as a strict set of tasks we are bound to finish.

At a high-level, we're going to be focusing on the following 5 goals:

  • Types on every desk, in every home, for every JS developer
  • Productivity through strong tooling
  • Approachability and UX
  • Community engagement
  • Infrastructure and engineering systems

The how is broken down into the following sections:

If you've seen our last roadmap, you will notice that our goals and areas of investment haven't changed - so much so that our last roadmap sufficiently covered all of 2020. The biggest changes you might notice are specific work items and amount we'll be focusing on each area of investment.

Language design and innovation

TypeScript and the core type system

  • Enabling popular JS patterns in a type-safe way
  • Increasing expressivity
  • Proving relationships between types
  • Stricter settings
  • Implementing ECMAScript features

The goal of TypeScript's type system is to statically model patterns in JavaScript in a reasonable way while catching bugs and enforcing correctness. As more features are added to ECMAScript, and as we notice emerging patterns in the ecosystem, we have more work to do, and because the JavaScript world moves fast, so must we.

While nothing has changed here, new areas of focus might target a few core issues like:

  • More types as keys for index signatures
  • Continued investment in template string types and tuple types
  • Expanded non-strict checks (e.g. override, no property access on index signatures, unknown in try/catch)
  • Running under multiple runtimes with conflicting global declarations

Back to top

JavaScript: TypeScript beyond TypeScript

  • Making the JavaScript editing experience better
  • Smoothing the transition to TypeScript
  • Leveraging analyses outside of checkJs
  • Understanding more dynamic patterns

TypeScript isn't just for TypeScript anymore. Our userbase now includes the JavaScript ecosystem as a whole, whether they are

  • using .js/.jsx files in editors powered by TypeScript,
  • compiling purely with allowJs,
  • type-checking with checkJs (also enabled by the // @ts-check comment), or
  • transitioning to TypeScript

Whoever these users are, we believe TypeScript can serve them in some way.

We largely expect investment in the following areas:

  • editor tooling
  • leveraging TypeScript to provide stronger hints in the untyped editing experience
  • polish in the existing .d.ts file generation from .js files
  • improving parity for JSDoc mode where appropriate (e.g. supporting a broader set of tags)
  • investigating /// comments

Back to top

Committee Representation and Standards Compliance

  • Supporting modern module patterns and formats
  • Advancing committee work on decorators
  • ES/CJS module interop
  • Expression-oriented constructs

We are involved in several different committees, including TC39 and the Node modules group. We try to provide representation as

  • implementers of TypeScript, the type-checker
  • implementers of JavaScript language services & tooling
  • a voice for the users of both of the above

We're prioritizing forward compatibility with proposals/features that we've adopted early on, and we are also helping champion features which are highly-demanded from the community. To maintain focus, we will likely only be engaged with a few proposals at a time.

We hold a policy of not implementing features unless they reach stage 3 and we have high confidence in them.

Developer productivity tools and integration

Editor productivity

  • UX around refactorings/quick fixes
  • Improve experiences in partial semantic editing, such as during project load, or in-browser code exploration
  • Invest in support for the Language Server Protocol
  • Investigate opportunities to make getting started easier

Partial semantic mode has allowed editors to provide a better experience in single files while waiting for full projects to load; at the same time, we've seen that this mode can benefit in-browser scenarios as well. We'll be smoothing out the experience there as opportunities and issues arise.

We'll also be scoping out support for the language server protocol over time. Most editor support will likely continue to use TSServer in the near future, but we'll be investigating what it takes to provide an LSP server for TypeScript as well.

Back to top

Speed, scalability, and stability

  • Provide user-level tooling for profiling tsc builds
  • Address top-hitting stability issues from telemetry & crawlers
  • Investigate long-run performance wins
  • Document best practices

We've learned lots from users over the past year in investigating slow builds. We've documented some best-practices for keeping builds fast, and we've built some tooling and options like --explainFiles and --generateTrace. We'll continue improving our diagnostic tooling as we learn more.

Back to top

Education and UX

Handbook and Website

  • Investigate, experiment, and improve user flow
  • Transition docs to the new handbook
  • Better onboarding for configuration and creating projects
  • Ensure site continues to be accessible

The new website has been launched, and our handbook gathering feedback there. We'll switching over to the new handbook by default this year.

Back to top

Error and type display UX

  • "Smarter" diagnostics
  • More related error spans
  • Investigate interactive diagnostics and quick info

This area continues to receive investments, where we find heuristics to make the compiler "smarter" and provide more actionable errors.

Back to top

Community investment

downlevel-dts

downlevel-dts has been a useful tool for several partner teams. It lets library authors rewrite .d.ts files so that they can be consumed by older versions of TypeScript. For example, for Typescript 3.6, .d.ts files with get accessors in classes need to be rewritten to property declarations. This tool will need ongoing investment for each release containing new .d.ts syntax. We'd like to document this more as part of the "blessed" flow in writing libraries, and continue investment in the tool.

Back to top

DefinitelyTyped

Back to top

External contributors

  • Weekly meetings to drive down outstanding pull requests
  • Dedicated time from engineering team to assigned pull requests following release candidates

Back to top

Partner teams

We'd love to hear from your team if you use TypeScript in interesting or broadly applicable ways. This gives us insight on various things we could improve. Please give us your feedback!

Back to top

API Consumers

  • Rolling requests for API endpoints
  • Invest in support for the Language Server Protocol
  • Investigate improving rich editing experiences
    • in enhancing plugins like IntelliCode
    • in templates

Back to top

Outreach

  • Public talks
  • Meetup attendance
  • In-depth blog post content
  • Help with TSConf coordination

We want to encourage members of our team to be involved with the community, and write and talk about things that they find interesting. This keeps us close to our users and makes the project itself more approachable.

Internal engineering

Team infrastructure

  • Invest in profiling and tracing improvements
  • Invest in automated test running UX
  • Invest in various quality-of-life GitHub Actions

The idea here is really anything that improves

  • stability
  • productivity
  • ease of contribution

for development on the TypeScript project and any of our satellite projects.

We may consider building out memory profiling tools given that we need it, but few options exist for free.

Back to top

Organizational guidance

  • Internal guidance on TypeScript-first API designs
  • Providing internal partner teams with best practices for projects
  • Addressing major Microsoft-internal build regressions

We are not a company-wide build infrastructure team, but because we have the expertise and because we are involved with the JavaScript community, we're able to provide a level of guidance across Microsoft to give our peers better experiences all around. Additionally, when we hear about major build regressions on large codebases, our internal teams can provide us with their source code, allowing us to often isolate minimal repros (which is not always the case with external closed-source codebases). This work usually benefits external users in some way, whether it's because a bug fix generalizes, because we've produced better APIs, or because we've been able to extract new guidance.

Back to top

Metadata

Metadata

Assignees

No one assigned

    Labels

    PlanningIteration plans and roadmapping

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions