In short
TypeScript 7 “what comes next,” focusing on TypeScript’s relationship to JavaScript/TC39, developer-tooling philosophy, the TypeScript 7 compiler rewrite in Go for major speedups, and upcoming 7.1 API/IPC work for tooling and embedded languages. It also speculates on how LLMs may change type checking and linting.
Guests
Daniel Rosenwasser, Principal Product Manager for TypeScript at Microsoft; joined weeks after TypeScript 1.0, previously worked on developer tools and compiler-related efforts. Josh Goldberg, host; independent open-source developer; works on TypeScript ESLint; author of Learning TypeScript (O’Reilly); Microsoft MVP; co-founder of SquiggleConf.
Key claims
TypeScript is “JavaScript with syntax for types” plus strong editor tooling. TypeScript implements JS features when they reach TC39 stage 3 and limits type-only additions to “erasable syntax.” TypeScript 7 rewrote the compiler in native Go to use parallelism/shared memory for ~10x faster builds and better editor responsiveness. TypeScript 7.1 adds a disciplined API via an IPC boundary to avoid memory duplication and support multiple tooling clients.
Notable examples
optional chaining and nullish coalescing (championed in TC39); decorators discussion (Angular/AtScript context); embedded-language support (Vue/Astro/Angular templates); LLM-driven lint/type rule generation; “elvis operator” reference.
Written by AI. May contain mistakes. Listen to the episode to check what was said.
Chapters
Tap a time to open that second in VOMeet Daniel Rosenwasser
0:45 to 2:08
Daniel Rosenwasser discusses his background and journey in tech.
“This episode is hosted by Josh Goldberg, an independent full-time open-source developer.”
Daniel's Entry into Technology
2:08 to 4:50
Daniel shares how he became interested in programming through gaming and early internet experiences.
“But before we dive into that wonderful world, Daniel, how did you get into tech?”
Transitioning to Microsoft
4:50 to 6:12
Daniel explains how his curiosity and skills led him to work at Microsoft.
“You know, going through, you know, high school AP classes for computer science.”
The Mindset of Developer Tools
6:12 to 8:06
Discussion on the mindset within the TypeScript team and their focus on empathy and developer experience.
“But, but a lot of the different abstractions, like how does your CPE actually function?”
The Early Days of TypeScript
8:06 to 11:18
Daniel reflects on the initial skepticism around TypeScript and the challenges the team faced.
“And then I'm always surprised when like people are not, but because that's because I'm in that first group.”
TypeScript's Relationship with JavaScript
11:18 to 13:20
Daniel discusses the relationship between TypeScript and JavaScript, and the significance of the TC39 standards.
“at the time where there was uncertainty about where the company sort of wanted to go with open source.”
Understanding TypeScript's Types
13:20 to 14:00
An explanation of how TypeScript enhances JavaScript with types to improve developer experience.
“relationship between TypeScript and JavaScript?”
Understanding TypeScript and its Features
14:00 to 16:40
Learn how TypeScript enhances JavaScript with type systems and tooling.
“aware of all of the nitty gritty of what was happening, right?”
The Role of TC39 in JavaScript Development
16:40 to 19:10
Discover the function of TC39 in standardizing JavaScript and its interaction with TypeScript.
“If you look them up, it'll say that they're the standards committee for ECMAScript because there's a whole bunch of trademark issues with that.”
The Evolution and Challenges of Decorators
21:11 to 24:29
Explore the history and complexities of decorators in JavaScript and TypeScript.
“I don't know if I would exactly say that.”
Show all 22 chapters
The Future of TypeScript and ECMAScript Features
24:29 to 28:00
Understand TypeScript's approach to implementing ECMAScript features and its collaboration with TC39.
“So when AdScript was announced, Sophia and our team actually had reached out to the Angular team to see if there was some way that we could actually collaborate and see what the missing gaps were, right?”
The Evolution of JavaScript and TypeScript Features
28:00 to 30:00
Learn about the evolution of TypeScript's features and its impact on JavaScript.
“None of the generation of JavaScript is driven by the types at all.”
Introduction to TypeScript 7 and Performance Enhancements
30:00 to 32:25
Discover the significant changes and performance improvements in TypeScript 7.
“So you've painted a picture about how TypeScript kind of came from within Microsoft, became very open source and has these ties into JavaScript, the community and JavaScript slash ECMAScript, the language.”
Challenges in Developing TypeScript's API
32:25 to 34:59
Understand the complexities involved in creating a new API for TypeScript.
“It's one of the most fun things that we've worked on.”
Inter-process Communication and API Design
34:59 to 38:19
Learn about the design considerations for TypeScript's API and IPC boundaries.
“a lot of API integrations for integrators.”
Future Plans for TypeScript: Versions and Features
38:19 to 41:39
Get insights into future developments and plans for TypeScript's upcoming versions.
“but we're not necessarily discouraging it either because I think it's good to see where those things go.”
Anticipating the Impact of Emerging Technologies
41:39 to 42:05
Explore the potential impact of new tools and large language models on TypeScript.
“It was us, like, this is us always sort of doubling down on reaching outward and getting a sense of where things are there.”
The Future of Linters and Language Models
42:05 to 46:28
Exploration of how language models may impact linting and code quality in TypeScript.
“Let's say that you've figured out the story for linters, for embedded languages like Astro.”
TypeScript's Evolving Features
46:28 to 50:15
Discussion on potential new features in TypeScript and the complexity involved.
“One obvious feature that we said no to for performance reasons was a stricter type for this on methods.”
Encouraging Adoption of TypeScript 7
50:15 to 54:05
Encouragement to try out TypeScript 7 and its improvements for developers.
“but those are some of the things that we've been talking about again.”
Fostering Cats: A Personal Touch
54:05 to 55:52
Daniel shares his experience with fostering cats and its joys.
“I have one last question for you, Daniel.”
Connecting with Daniel Rosenwasser
56:00 to 56:32
Learn where to find Daniel Rosenwasser and keep up with TypeScript updates.
“If people wanted to learn more about you and the work you're doing online, where would you direct them?”
Transcript
Automatic transcript. May contain errors.0:00TypeScript is a programming language that builds on JavaScript by adding a system of types. Those types let developers describe the shape of their data and catch mistakes before code ever runs, while also powering the autocompletion and editor tooling that many developers now rely on every day. It was first released in 2012 and has since become one of the most widely used tools in web development. TypeScript recently underwent one of the most significant changes in its history with the release of version 7. Daniel Rosenwasser is the principal product manager of TypeScript at Microsoft, where he began as an engineer on the team just weeks after the TypeScript 1.0 release.
0:44In this episode, Daniel joins Josh Goldberg to talk about the features of TypeScript 7. They discuss the TypeScript team's approach to tooling, TypeScript's relationship with the TC39 standards process behind JavaScript, the new API and IPC boundary, how LLMs could reshape type checking and linting, and more. This episode is hosted by Josh Goldberg, an independent full-time open-source developer. Josh works on projects in the TypeScript ecosystem, most notably TypeScript ESLint, a powerful static analysis toolset for JavaScript and TypeScript. He is also the author of the O 'Reilly Learning TypeScript book, a Microsoft MVP for developer technologies, and a co-founder of SquiggleConf, a conference for excellent web developer tooling.
1:34Find Josh on BlueSky, Fostadon, and.com as Joshua K. Goldberg.
1:52With me today is Daniel Rosenwasser, Principal Product Manager of TypeScript at Microsoft. Daniel, welcome to Software Engineering Daily. Thank you so much for having me. Great to talk to you today, Josh. Yeah, we're really excited to have you. I've been looking forward to this. There's a lot of cool stuff happening in TypeScript, both with the recent releases and then upcoming work. But before we dive into that wonderful world, Daniel, how did you get into tech? How to get into tech. I feel like this is a very common one for a lot of people, you know, video games, things like that. And then getting a little bit more and more and more curious about all the sorts of things and how they work and thinking, oh, maybe I could do this or that.
2:28But I think the funny thing was for me with, I mean, maybe programming specifically, the way I got into a lot of that was through just maybe the earliness of the internet and then just meeting random people on forums and probably being a little bit too young to be on like a video game forum at the time, right? Like, I don't know, maybe 10, 11 years old or something like that. But meeting these random people from around the world and then finding out that they were, you know, 15, 16, 17 years old and running a forum themselves and realizing like, hold on a second, you're all a bunch of teenagers running a website and that's possible?
3:09Like how? Wow. And so naturally, my curiosity got the better of me. And I asked them, like, how would I even start with a lot of this stuff? Oh, well, you know, there's this thing called HTML. And then you can use like a site like GeoCities or this or that to sort of experiment with all of that. And so a lot of my early stuff was, you know, just always hacking around with a family computer and ruining it in various ways, as I'm sure a lot of us have. But then just kind of creating these things and realizing like, wow, there's so much power in even this basic HTML stuff. And then you're able to kind of like run little pranks on your friends by throwing a thousand alerts onto a page.
3:52And this was back in Internet Explorer six days. Right. So like you couldn't just say like no more pop ups. Right. You just have to kind of suffer through them. And gradually, I got more curious about other programming languages. And I ended up, I actually even have the book behind me. It's Beginning Programming for Dummies because, you know, that's me. So I learned QBasic through that, which is a lot of fun. It was a little, you know, it was a bit of an outdated environment at the time, right? You know, this was around like early 2000s. QBasic was like, I don't know, late 80s, early 90s. But it came with your Windows 98 CD, right?
4:26And then from there, I was also exploring other things. Like I actually wanted to learn how to set up a website, right? So I learned PHP and I set up an Apache server and, you know, I did like the whole LAMP stack. And then I, you know, then there's like, oh, the LAMP stack, like learning Linux. Learned C++ from there too, because I didn't know that that was going to be more over my head than I realized. And it became more typical, right? You know, going through, you know, high school AP classes for computer science. And then, you know, the typical college to industry pipeline there. Now, how did you get from tinkering around with LAMP and then LAMP stacks over to Microsoft?
5:04It seems like a bit of a jump. Well, I think that there was always just a natural curiosity about how every part of the computer that I was using worked, right? So I was always really fascinated by every part of it. Like, how does the operating system work? How does all of this stuff work? and I don't know if, you know, part of your question is, right, like, oh, here's a guy who was like starting to dive into like the very Linux-y, like OSSE stuff. But I think that I was always just really excited by all the different technologies that were out there, right? So I was really, I tried C Sharp and Visual Studio and give things like that a try.
5:45And I was just really curious about tinkering. I was particularly interested in a lot of the lower level stuff because it was just so there's always like, okay, but how does that work? Right? Like, you can keep stripping a layer of abstraction away and learning about like the internals there. It's like, yes, your computer can track time, but how does that work? For example, like that's, I mean, maybe that's a, it's, that's more recent for me in some ways. It's just like, okay, but like, how is that all that tracked? But, but a lot of the different abstractions, like how does your CPE actually function?
6:17And then how do system calls work and et cetera, et cetera, et cetera. But like also programming languages were really fascinating to me too. So I was experimenting with different languages over time. There was definitely like this, this sort of group within my university where we were all experimenting with like functional programming for a bit. And then those say like that's, that entire crowd was, you know, ended up also kind of taking some extra classes like the compiler construction class and the program language theory classes. And there was this sort of intersection of my interests where I definitely thought that I really wanted to work on developer tools.
6:55And to me, one of the probably, there's only a handful of developer tool companies out there. Microsoft was one of the ones that really stuck out to me, right? And so I applied through the internship program. I ended up at some part of Azure, which was a little bit scary for me at the time because of any of the things that I was, I had learned about in college. I think networking was the weakest one. My professor was like practically falling asleep during his own lectures. It was a little bit of a weird experience. So I was really not confident that I knew anything there, but I remember my hiring manager as an intern had told me like, well, you know, just because you're not going to be working on developer tools for the summer doesn't mean like, that's not a possibility in the future, right?
7:44Basically, the best way to work at some other part of Microsoft is to work at Microsoft in the first place, right? So I had really annoyed my intern coordinator just saying like, I really want to work on developer tools, right? Like, honestly, I don't think they had a lot of people clamoring to them to work on developer tools. I'm always shocked at this. There's definitely a very like a certain group of personalities who are like really into this stuff. And then I'm always surprised when like people are not, but because that's because I'm in that first group. Well, it's interesting, right? You have developers who day to day use these tools and the better you are with those tools, the more you understand them, the more effective you are at the things you create with them.
8:23So tell us what is that mindset that you and the rest of the TypeScript team and all the people working around you in DevTools have that you're trying to identify here? I almost want to answer with something like, oh, it's about perfecting your craft or something like that. There is a little bit of that. There's a lot of empathy that kind of drives the decision making, right? Like you know what it is that you are seeking as a developer, you hit all of those rough edges, you understand what other people are trying to accomplish. That really drives you to make things better for yourself and for others, because you know how much of an improvement you can make in someone's day-to-day experience.
9:05Early on, on the TypeScript team, there was something really, it was this feature for colorization. We had several layers of colorization so that we could colorize things as quickly as possible and then sort of fill in the more complete colors after the fact in ways that were really hard to spot out, right? And there was like an older version of Visual Studio that only supported one mode of colorization, one of the layers or something like that. I really, really did my best to actually implement a version of that colorization just because I knew that our developers would be so much happier if they were on like one earlier version of Visual Studio just to get like better syntax highlighting, right?
9:54Because I knew how much that would have been a bummer for people. I knew how frustrating that would have been for a lot of developers. So I think a big part of it is honestly empathy. I really feel like in so many ways, I really lucked out being on the team that I did because the people I started working with on the Tetris team just really had a good mindset about a lot of these things. They really had developer empathy. They had like the strive for excellence. Keep in mind that I had, I don't know if this is jumping too much around in the history, But I actually started out as a developer on the team.
10:29And it was like my first true full-time job out of college. And TypeScript had just released at 1.0, maybe three to four weeks prior. And I was coming in there and the big question was like, what are we doing next? Like, I really didn't know what the goal was. I had heard about TypeScript in college. I had a lot of skepticism. I thought it was a great idea. But I had a lot of skepticism at the time as an outsider, not working at Microsoft, seeing Microsoft trying to deliver a JavaScript program, a programming language for JavaScript that was open source. This was really not where the company was at at the time.
11:09You're talking about Microsoft's stance and policy with open source. Yeah, in several ways. I think that, you know, there were a lot of different things at the time where there was uncertainty about where the company sort of wanted to go with open source. There were a couple of different really cool projects that were released with open source-ish licenses, but there was always sort of like, oh, but I'm not really familiar with that license. I don't know if I can really use it. So I think, and a lot of those often came from the research wings. That was my perception, right? But I kind of joined right after Roslyn had been open sourced.
11:48TypeScript had hit 1.0. And VS Code was basically maybe a year, year and a half away from being actually released publicly as a product. So it was early days. I think that the developer ecosystem was pretty drastically different, right? Whereas in the years after I joined, open source became the default for so many of the developer tools and products that we had developed at the company. And I don't know how familiar people are with that, but there were a lot of times in the early days where people just even had a distrust from our team, right? And we sort of had to prove a lot of people wrong by just aggressively kind of like doubling down on our stances, doubling down on our principles, and really pushing for what we thought was right.
12:39We had an episode of Software Engineering Daily with one of your beloved coworkers, Jake Bailey, great individual. And Jake talked us through a lot of the sort of technical details of TypeScript, the stuff you were working on back then, you know, the compiler, what is an AST, how does that work? And if anyone's curious about those details, I'd highly recommend they check it out. But for you as a sort of different avenue, I'd like to continue talking about the empathy here. So you've talked about the sort of positioning in the ecosystem empathy that at the time, Microsoft really needed to prove that, yes, they can make an open source project that would actually be good for JavaScript developers on a technical and a situational level.
13:15But also the technical problem of TypeScript was not yet solved at that time. What was the relationship between TypeScript and JavaScript? So for those who maybe don't work in that ecosystem or don't deeply understand TC39, which we can get into later, what is the relationship between TypeScript and JavaScript? And why was that such a difficult thing to figure out around 1.0? You'll have to take a little bit of what I say with a grain of salt, because as I said, you know, I had joined only a few weeks after TypeScript hit 1.0. And maybe this is a, this is just me, maybe this is a shared experience.
13:50But for a lot of, I feel like as a junior developer at the time, I was taking so much in and at the same time, really not fully aware of all of the nitty gritty of what was happening, right? Like not necessarily realizing some of the significance of some of the emails I was getting and things like that. I'm like, oh, is that concerning me? Like, I don't know. I'm probably just going to try to focus on implementing template strings or whatever. I think that this must be common for others. But if not, hey, you know, you can make fun of me. But anyways, to answer your question. So TypeScript is a language that builds on JavaScript.
14:30And what it does is it brings these different additions to the language in the form of what's called types. So these things are ways of saying, here are the sorts of shapes of objects that I'm going to have going around my program. You know, here's an object. These are objects that have these specific properties and one of them's a number and one of them's a string and they're all spelled a specific way. You can actually add these types around your project to make sure that some other program can run through them and tell you when you're using them incorrectly. And we can also provide really strong editor integration too, so that when you're actually authoring, we can anticipate that you're going to write a property of a specific name or something like that.
15:16So not only are we able to validate, we're also able to power the authoring experience. We're able to help with exploration. And so in a sense, TypeScript is JavaScript with syntax for types and really strong tooling. And one of the challenges with building a language on top of another language is that the inner language has its own track, basically, of development. It has either a language development team, a committee that wants to add their own features to the language. So JavaScript wants to add specific constructs. And TypeScript needs to basically make sure that it doesn't cause any divergences, issues there.
16:07And back in the early days, it wasn't clear to what extent TypeScript could develop new features. like what specific features it had to hold back from, what was fair game. A lot of the early development in TypeScript was based on interactions with TC39, early ideas of what classes were going to look like. Just to confirm, TC39, the technical committee for JavaScript that you are now on. Right. So TC39, my apologies, TC39 is the standards committee for JavaScript, basically. If you look them up, it'll say that they're the standards committee for ECMAScript because there's a whole bunch of trademark issues with that.
16:48And so the body that basically manages the specification, ECMA, ECMA, basically made its way into the name of this program language for the specification itself. So TC39 meets, I don't know, maybe I think six times a year and representatives from different companies and organizations come together and they propose additions or amendments to the language to try to help either improve it, disambiguate it for implementers. So these are typically like your engines in the browser. They'll run in Node, JS, or Dino, or Bun. And basically the goal is to try to create improvements in the language that are all consistent across these different engines.
17:34That way your code can run anywhere in a consistent way. So TypeScript also has representation on TC39 as well. This allows us to have a good handle on where the language is going, provide feedback on whether or not we'll be able to provide a good type checking and editing experience. So type checking is that process of, you know, running through your typed JavaScript and telling you where the errors are. And also we can provide feedback on like how proposals could improve to avoid certain foot guns and gotchas and things like that. So with early days of TypeScript, TypeScript was developed before class syntax was actually standardized.
18:19It was developed before modules were standardized. A lot of different things were added and implemented in TypeScript before they were actually nailed down. And so TypeScript had to change its implementation several times so that people had to rewrite their code a few times to actually make it work in the successive versions of TypeScript so that they could be compiled down to JavaScript. Your customer lives in the real world and it's messy. Intermittent connections, mid-onboarding drop-offs, edge cases on devices you've never tested. Mobile apps reflect reality in a way no other surface does.
18:59Yet, from an engineering perspective, they're the hardest to understand. It's common for mobile engineers to see green backend dashboards, normal error rates, no crashes. But inevitably, somewhere, there's a frustrated user watching your app spin. After a few seconds, they'll lose patience, close the app, and turn their attention somewhere else. They may never come back. The worst part? Most observability tools never see any of it. BitRift, on the other hand, captures 100 % of mobile data, unsampled and in real time, so it's immediately queryable by engineers and AI agents. It's mobile observability built for the real world.
19:33Try BitDrift today. bitdrift.io slash signup. You're building agents that can write code, summarize documents, and automate workflows, but they're missing one thing, awareness of the world around them. X-Weather combines enterprise-grade weather intelligence with agent-ready APIs, natural language capabilities, and an MCP server built for tools like Clawed, Codex, Copilot, and modern IDEs, So your agents can adapt workflows, automate responses, and make better decisions based on real-world conditions. Backed by Vaisala, whose instruments fly on NASA missions to Mars, XWeather delivers trusted data and unique insights that go beyond conditions to actual impact, from real-time lightning strikes to road surface forecasts.
20:13Start with 15 ,000 free API calls every month and pay only for what you use as you grow. Your full weather stack, for developers, by developers. Start building for free today at xweather.com. If you're running Postgres in production, you've probably felt the moment analytical queries start fighting your transactional workload. Most teams end up adding a second database and all the pipeline complexity that comes with it. Tiger Data, creators of TimescaleDB, takes a different approach. We extend Postgres with hybrid row and columnar storage so one table handles both writes and analytical scans. Native compression cuts storage costs up to 95%.
20:50Continuous aggregates keep dashboards live without bash jobs. and it scales to petabytes without you re-architecting. Companies like Cloudflare, Octave Energy, Schneider, Axpo, and Floco run production workloads on Tiger Data today. No stale data, no second system to operate, just Postgres. Managed for you, ready for the workload you're building toward. Try it free at tigerdata.com. Do you regret decorators? I don't know if I would exactly say that. I think that when we look back at decorators... Also, could you explain why what I just asked is an annoying question? Why we're talking about a third rail issue.
21:29I thought there would be no gotchas. No, I'm joking. So decorators are a proposed feature in ECMAScript or JavaScript. And the key thing that they enable you to do is some level of what's called metaprogramming over classes and parts of classes. so that you're able to do things like, say, when you call this method, I actually want you to call this other method instead. And so you can sort of intercept the entry and exit of the method. You can replace certain members with other features. You can register members with some sort of framework so that certain things can be either tracked or dependency injected.
22:08So there's a whole bunch of different things that you can do with decorators. You've probably seen them, they start off with an at sign and they're usually associated with a class. And so in the early days of TypeScript, I think around roughly the same time, there are a couple of things that were happening. This was probably like late 2014. We were doing our rewrite for TypeScript 1.1, actually. That was actually one of the first things I was involved in as an engineer on the team. A type checker called Flow was now kind of coming onto the scene. This was a type checker from Facebook. and this was a type checker for JavaScript as well, right?
22:44Not just like a random type checker. And there was this effort announced by the Angular team called AtScript. The thing that, you know, our slogan at the time, or like one of the things that we described TypeScript as at the time was TypeScript was a superset of JavaScript. AtScript was this proposed idea of a language that was a superset of TypeScript. And the idea was it's JavaScript with types, but also we're adding this thing called annotations, right? And the idea with this was that they wanted to use annotations in the next version of Angular so that they could have this build tooling that leveraged it in certain ways, could optimize it.
23:22So a few different people were involved in that effort. Ron Buckton from our team, Sophia Turner and others on our team were all really involved in a lot of the stuff too. and Yehuda Katz as well, who was thinking about this from the Ember.js perspective, another JavaScript framework. And so there was this question of, well, could there be this runtime version of this thing that's not just something that a special compiler could understand, right? And so the idea was that there was this proposal for decorators. With the Angular team, their plan was actually just to say, well, yeah, there's a decorator, but we're going to just use this as a static annotation.
24:02We'll do something special with it. Maybe there's also a runtime implementation there too. Don't worry too much about it as an Angular user. That's like not really something we want you to ever worry about. But it still was a JavaScript language proposal. Years. So that was something that TypeScript implemented at some point, right? Like the basic thing was once we hit, I'm kind of jumping ahead a little bit. So my apologies for that. I don't know we're going to be talking about decorators today. Okay. So when AdScript was announced, Sophia and our team actually had reached out to the Angular team to see if there was some way that we could actually collaborate and see what the missing gaps were, right?
24:44And I think this kind of draws back to that framing at the time that I told you about, right? Like people did not really trust Microsoft that much in the developer tooling ecosystem, in the JavaScript ecosystem. So the idea that this team from Google who was running an open source JavaScript framework was going to like say, hey, you know, could we work something out here? It was a little bit, I don't know, maybe they just they didn't trust us. And once we actually all met with them, I think that they saw that we were just some we're just well-meaning people who wanted to provide a really good developer tooling.
25:18and I think a lot of the maybe perceived walls came down and everybody was really excited to collaborate and work together. And then that's when we, you know, Yuru and others working on decorators became more involved in some of the process there. And so we brought it to Stacey that it didn't have as a proposal. But there was a lot of back and forth on decorators, right? Like, oh, should the symbol actually be the add sign? Should we use that for something else? Oh, can we change the runtime semantics of this? So this was one of the problems with TypeScript in their early days, not really knowing how far ahead it could actually go to implement new JavaScript features before they had reached a certain stage.
26:04So looking back on it, you asked, oh, is there regret around decorators? And I think you have to look at how many people, they became more productive as a result of having something there. We sort of grew both the TypeScript and Angular communities a lot more. And then other frameworks as well were able to use this thing. I think where we are now is a challenging point, right? It is, there's some ambiguity around where the direction is for decorators. They kind of got redeveloped along the way. They got new semantics, new APIs. And so understanding where the committee is thinking about this, it's a bit of a challenge.
Read the full transcript
26:48But, you know, we're still involved. We have others at Microsoft who are trying to get feedback from internal frameworks and libraries to understand this stuff. It certainly did change where our framing was for TypeScript, right? So when it came to what features does TypeScript implement, our newer policy, I mean, it's not new anymore, but we've been running with this for years. We implement features as soon as they hit what's called stage three in JavaScript, in the ECMAScript standardization process. So in this process, once something hits stage four, it's officially part of the upcoming specification.
27:28Sage 3 is what they call a signal to implement for implementers. That's usually good enough for us. So that's when we implement things. But beyond that, when we want to add new features for types, for things that actually help on the static analysis side, that is what we do, and the tooling side, it's limited to what we'd call erasable syntax, right? stuff that you basically can only compile roughly in isolation from any other file. None of the generation of JavaScript is driven by the types at all. In theory, it should be the case that you should be able to just strip away all the special types of syntax and be left with equivalent readable JavaScript.
28:17That's sort of where we are today. It has simplified so much of how we collaborate with the JavaScript standardization committee. And it also gives us a clear line of what is and is not in our scope. When it's not in our scope, and we strongly believe in it, we can champion a feature in NTC39. An example of that was optional chaining and knowledge coalescing. these are these are like sometimes called the elvis operator because like you know one of these things is like question dot and so like the question sort of like makes it look like part of elvis's hair and then the two dots these are features that make it easier to deal with undefined and null they are in other languages i would i did not originally propose the features but i became active in championing the features in TC39.
29:12And there's a lot of like, oh, that seems really challenging to actually like champion through the committee. Like there's a lot of like pushback on certain things. But, but, you know, I think that was a case where we really explored the problem space. We really talked to everybody in the committee. We try to get feedback. We try to understand people's motivations and we're really diligent about driving it. And, you know, it wasn't all me. Like we had other people on the champion group as well, you know, helping out with the testing, helping out with feedback on the specification. Really, really great folks.
29:50And it was just like a really cool thing to see that we could all come from different companies and create something where like JavaScript, not even TypeScript, JavaScript the language got better as a result of all this, which also makes TypeScript better as well. I think a lot of listeners will be pleasantly surprised to learn that not only are we talking about TypeScript and we have things to credit you and your team for around TypeScript performance, which we'll talk about next, but also the Elvis operator, knowledge coalescing and optional chaining. Those are good things. Thank you for that.
30:19But okay. So you've painted a picture about how TypeScript kind of came from within Microsoft, became very open source and has these ties into JavaScript, the community and JavaScript slash ECMAScript, the language. Let's fast forward a bit. We did, again, have an episode about the Go port, but could you give us just a brief recap? How has the 26 to 27 years era worked for TypeScript? What have you been up to and how is this Go port going? Well, we have just shipped TypeScript 7. We shipped TypeScript 7 a few weeks ago. And for those who are not familiar, this version is extremely special because it's completely different.
30:59Well, with a caveat, it's a different code base. It's been rewritten in native Go code, which has provided us with what is often a 10x beat up on many code bases. And the way that we've achieved that is through a combination of port, of moving from a compiler written in TypeScript to a compiler written in Go and getting a native speed up through Go code, but also being able to leverage shared memory, parallelism, and concurrency. So being able to actually use the most of all the cores and all the threading features that you have to actually maximize throughput and get things done as quickly as possible.
31:44Maybe many of you have noticed in the last, I don't know, at least two decades, where we've been seeing that the number of cores has been growing rather than the clock speed on processors for the most part. And so as we've been able to scale things up, we often have programs that don't capitalize on all of those cores. And so we now have a new compiler that is able to like parse all your files and saturate your cores as much as possible and actually get a build that is almost instantaneous for many people. So this was a really big undertaking and we've worked on it for, I guess, what you described as over a year and a half, at least at this point.
32:24It has been exhilarating. It's one of the most fun things that we've worked on. I mentioned that as an, you know, when I started as an engineer, I got to be part of a rewrite as well. We've been describing this more as a port because we've been looking basically on the left side of the screen, right side of the screen. One side is TypeScript. The other side is the Go that we're converting to. And we've been trying to keep everything one-to-one as much as possible. So it's been a lot of fun. And it's been a lot of fun finding ways of actually making it more than 10x, even faster, finding other optimizations that we can do.
33:02But the release has been really well received. I think a lot of us really wanted to make sure of that because this was not an easy call for us to make, you know, when we first embarked on this effort. So everyone on the team was really trying to pull through and make sure that it happened well, like that this was a good release for people. We know that there is more to the story for TypeScript 7. We knew that there are certain things like providing an API and things like that. And so we know that a big portion of the TypeScript and JavaScript ecosystems are still waiting on the next step in TypeScript 7, right?
33:42So that they can actually get TypeScript support in Vue files and Angular files and things like that. But we've been able to make a lot of people happy with this release, right? You know, like I mentioned, this is, it's a 10X speed up, but also this depends on your computer and your processor and whatever. But like we have teams at Microsoft with massive codebases and they have experienced a lot of frustration running on older versions of TypeScript because, you know, the TypeScript 6.0 and prior, this was a JavaScript codebase. I don't know how much you want me to get into the history of how we made the decision to start doing TypeScript 7.
34:22But basically, we had a compiler written in TypeScript, and it was extremely fast for being a TypeScript application, right? Something that runs on a JavaScript engine. But it was ultimately limited to one thread, and people would often hit out-of-memory issues on really large code bases. And they'd often be waiting minutes for really large projects to actually load in their editor before they could do anything. I would direct our viewers to the Jake Bailey episode where we covered it, but that's a great overview. Thank you. I also want to dive in a little bit though to the area you're discussing, because as you've said in blog posts and other videos, 7.1 is the version where you're going to have a lot of API integrations for integrators.
35:05What is it about the API that needed to be pushed to 7.1? Like what makes this a difficult problem and what are you doing to work with the community around it? You know, one of the ways that we developed an API in the original versions of TypeScript was it was sort of this organic growth. And it was the typical thing that you do if you're writing a type JavaScript library, right? Like you have a bunch of functions and methods. They are ideally well-founded in terms of shape, right? Like they have some coherency. And then you say, well, this is something I feel pretty ready to expose to other people because other people want to do the same things that my application internally wants to do, or they require the same sort of data or some internal data to do that, right?
35:50And so you have to come up with some abstractions, but it's still hard to do that in a disciplined way. And so there's basically this API that grew very organically, right? And so when we moved to Go, there was a couple of big challenges on a technical side, namely that, well, you're written in Go, oh, how the heck do you get all of these JavaScript libraries to continue using any of the information, right? And then what if you want these other applications to be able to use your data, right? I mean, the default in the Node ecosystem is that, hey, I'm going to provide a JS API, but also alongside with us, there was this sort of native tooling renaissance for a lot of people, right?
36:36People are maybe going to want to write stuff in Rust that also consumes the same data. And it's particularly hard with our choice of language, Go, in some ways, because there is a runtime with a certain set of expectations around like who owns memory and how and why and where. And so we had to come up with something that was relatively disciplined that we would feel at ease exposing on both to both JavaScript and other consumers in some way. So basically we ended up with something where we are providing an IPC boundary, an inter-process communication boundary between our API. It's not just that you're seeing all the same data that we are in our process.
37:21You actually have to transfer things over and be a little bit more disciplined in how you ask for certain information across the wire so that you're not just using all the memory in your address space and mirroring it all over too. We picked Go because it made the port so much easier while also being able to provide a lot of the speed gains. But, you know, if we had picked any other language, right, like we didn't want our choice of language to be this implementation detail that was exposed to how you get data from the TypeScript compiler. So we came up with something that would have been good regardless of the language that we chose, right?
37:57And so we've been developing a solution that has sort of first-class support for TypeScript and JavaScript consumers, but could be used in any language ultimately. And we are seeing other consumers of that. And so we're seeing some people not use the API in the meantime, right? And they're building their own linters and whatnot. And it's open source. You can't really stop people, but we're not necessarily discouraging it either because I think it's good to see where those things go. But it's incredibly promising to see where a lot of the tooling will go with this stuff. We're really committed to making sure that there's a good story because I don't know if I would necessarily be able to confidently say it's like a quarter or a third of our users, but definitely like a big segment of people use things like embedded languages, like these sort of templating languages that sort of embed TypeScript and JavaScript.
38:50They really are looking forward to having good TypeScript support. linters and other tools, right? Like obviously you're very familiar with this domain and I'm sure you're keeping a close eye on this as well. But we need to really be able to provide a solid experience there. For reference, one of the most amusing parts of the linter or JavaScript tooling ecosystem right now is that there is a third language in play, Rust, and the kind of up and coming, very fast, very integrated linter, OXLint, is built on Rust, but it's typescript integration is this thing called ts golint which is this i've i've seen some obscene words from its creators used to refer to how it reaches inside typescript also words like beautiful and clever then also there are custom rules written in in typescript so do you do you see this ecosystem kind of normalizing or standardizing getting a little less wacky over the next version or two?
39:45It's really interesting. I don't know. I think that for some set of tools, it may not be out of the question to take that approach. One of the hopes with API was to try to minimize the amount of duplication. And so we have this notion of being able to have multiple clients for a shared, what you'd call session, a project, right? So you basically say, I have multiple things trying to use the API, they all have the same view. And maybe they're able to actually plug into the same view of what you have in your editor. So that way, they're not all loading up the same stuff all over again in their processes.
40:27That's sort of the ideal, like, maybe it's not the worst thing for some projects to have their own copy or something like that, right you know if they if they are able to find that hey for some people that there's there's this trade-off of speed versus memory and it's okay you know that's totally fair game but we are definitely designing with this we're designing with a lot of like the stuff we wish we could have done in mind right in the in the type of 6.0 days right oh it would be really cool if we could have multiple clients it would be really cool if we could do all this stuff but it's prohibitive without threads.
41:02It's prohibitive without redoing a whole bunch of different stuff internally and not having the language server designed specifically with that stuff in mind. We have a lot of architectural improvements on top of the old code base that have made things so much simpler. And also even improved reliability in TypeScript 7, which is cool because we can say like, it's not only better, it's less crashy. What a rare treat to hear in this day and age of software. Right. We were really diligent about making sure that we got a lot of feedback from external partners and companies. It was not just us working with internal Microsoft teams.
41:41It was us, like, this is us always sort of doubling down on reaching outward and getting a sense of where things are there. You talked about TypeScript 7.1, which will have the upcoming API, and one can assume something around TypeScript 7.2 that adds to it. I want to talk a little bit in our last five to 10 minutes of technical discussion about 7.3, perhaps even 8.0 years down the road. Let's say that you've figured out the story for linters, for embedded languages like Astro. All these things are standardized and normalized. What does that ecosystem look like to you? How does this feel as a person just trying to write some darn TypeScript once this has all been figured it out?
42:20Oh, wow. That's a big question. I think that it is, it's such a challenge to know exactly where we're going to land. 8.0 is generally like two and a half years from 7.0, right? So knowing exactly where we'll be, we typically don't have something like a two and a half year plan on that stuff. I can tell you some of the big question marks that we have around that, right? Certainly a big part is the changes in development practices, right? I mean, the obvious, the elephant in the room is in addition to all the excellent, like powerful tooling that we have in your editor, now have models like large language models that are able to generate incredibly correct on the first try code in a lot of these cases.
43:09So one of the thought experiments I always have is, well, what does that imply about the trade-off between expressivity and verbosity maybe, or the sorts of rules that you can enforce, right? So in programmer languages, there's this trade-off of what's called soundness and completeness. So I'm going to geek out a little bit here. But basically, you will often try to catch a certain class of bugs by being like more sound. But the trade-off is, you know, in order to express that something is actually like an okay operation, you're often trading off completeness, which is the ability to say like, or you need to provide expressivity to communicate that, which is often like, I need to find ways of telling a checker compiler that something's okay, right?
43:56So one thought was, do we find more ways of being more thorough in our type checking? Are there certain gaps that we have that we can kind of like close out? The other side of this is that that is good in some capacity, but there are often places where there are more ad hoc things that you want to actually check, right? There's more things that are like more specific to your company or team, or there's certain classes of bugs are special about your code base, which I'm sure in your mind, you're lighting up at like, hey, wait, those are Lint rules, right? Exactly. And so there's definitely this question of, are language models really well suited for creating new Lint rules on the fly, right?
44:46Like something that maybe someone on your team said, oh, it'd be really cool to write a Lint rule to do blah, right? Blah, blah, blah, blah. You know, that would be really cool. But yeah, you have other things that you kind of have to do. And unless your teammate gets really like pulled in by the idea, like they get nerd sniped, then it's just not going to happen. And these things are now much more within reach, right? So it could very well be that the API becomes even more important over time so that we can support that ecosystem. And maybe there's more integrations within our tooling to sort of unlock that.
45:21But there are also lots of other things that we always have on the horizon, right? There's always new JavaScript features. There's always new features that are added to Node.js and other other runtimes that we have to implement. And then there's often things that are really nice to have. It's like, you know, people have asked, people have all these weird things in TypeScript for doing metaprogramming to say, hey, I want to be able to split the names or like the contents of a string literal type in TypeScript, right? These are literal types that describe the contents of a string. That's how powerful our type system is.
45:57And wouldn't it be cool if there was a less hacky way of splitting a string? There's a lot of quality of life things that we've sort of held off on because for the last year and a half, we've been trying to make things as fast as possible. And it was a risky trade-off, but I think it's become more and more clearly promising. I'm curious. Are there types or type features such as dependent types, negated types, et cetera, that you would want to define for the listener and then say may or may not be possible anew because of the performance improvements of TypeScript 7? One obvious feature that we said no to for performance reasons was a stricter type for this on methods.
46:36so when you define a method on a class like we had a strictness option to say no no no you can never orphan this method without rebinding it in some way unless you explicitly you're going to have to define what orphaning a method means for the yeah so basically you can basically grab a reference to a method on an object and if you do that every method in or every function in job most functions in javascript So many gotchas here. They implicitly have a value called this when you call them, like T-H-I-S. And when you call a function on an object, like as a method, like object dot my method, and you call that, basically this gets bound as the thing on the left side of the dot, right?
47:27As the receiver object is what they often call it. And if you just like grab a reference to the method and then try to call it directly. And there's, so then you call it directly and there's nothing on, there's no object on the left of the dot. There is no dot. You'll get undefined. And then if you try to access this in the method, if it ever does, you're going to error message that says undefined is not a valid object or something like that, right? So we didn't do that for performance reasons. It was also kind of painful, right? As a user experience thing. So we could potentially revisit that.
48:02I think negated types, it's come up again on the team actually in the last week or two. So we have some people experimenting with it. And I think there was some performance characteristic there as well. But I think it really comes, a lot of the things that we start off saying no to is just because the user experience story is a little bit too complicated, right? You know, you say, I have not a number, I have not numbers, right? So that's what a negated type is. You say, like, I accept anything that's not a number, which is weird because if you really want to geek out and you look into something called constructivist logic, you now have to like, like, there's a whole thing about being able to actually say, no, you really don't have, like, this thing does not describe a number.
48:49Like what doesn't describe a number? Well, strings certainly, like they're a disjoined set. They're truly a disjoined set. But there's a lot of stuff that is like technically not a number, right? Like if you say that you have, if you have something of type unknown, that encompasses every possible object in the type of type system, right? So can you assign an unknown to not number? No, because technically a number is unknown. So you have to sort of reject that, right? Okay. So maybe with these specific types, it's kind of fine. But like you just say, these are not valid. But then it gets really hairy when you start talking about object types, right?
49:36So I love a lot of the type system. I don't know, like the algebra of it all. But it also makes it a great way that, you know, if I had a whiteboard or something like that, we could talk about it, we could actually show like, this gets really gnarly in ways that both don't make it. a lot of sense from a mathematical perspective, but also from like a type system perspective, it's really hard to reason about it. But if we work on it a little bit more, we could find something that is still useful for people while being a little complicated for certain examples. So I don't know. I mean, that doesn't really answer your question about performance exactly, but those are some of the things that we've been talking about again.
50:18I think you answered the question correctly, which was to answer the correct question. it's really i think oftentimes not a question of performance whether you one should add these things to types of it sounds like even if you were performing it's just all heck levels of complex that maybe it's not even worth it for users to be able to represent these things maybe the better investment would be you know deeper llm agent integrations performance overall just like making it more palatable for people and tools right yeah i definitely think if you if you look back at the, you know, there's like an essay or a blog post from many years ago, used to be hosted on the Microsoft blogs, but it was something like every feature starts at like negative 1000 or negative 1000 points, right?
51:02It's still true today, right? You really have to justify something to be added to the language because now every person has to start thinking about this feature. It's very rare that you can say, oh, we have this language feature. Yeah, but it's like more pay to play. Don't worry about it. It'll come up for people, right? They will have to think about it. They will have to know whether or not they have to know about it. It can be frustrating. Maybe it's better with large language models. I think we'll have to see it there. In every discussion that I've had with other programming language designers, it feels like all of the same concerns that we have about languages today apply equally as well to these models, right?
51:43Complexity, familiarity, right? Like trying to balance between those different assets. Yeah. So for our last technical question, this interview, is there a single thing you want to plug that if a listener is involved with their TypeScript team at work or doing tooling stuff, what would you want them to try out from TypeScript today or TypeScript tomorrow? So I think that if you're already using TypeScript 6.0, and as long as you're not using any, editor integration or language server plugins or things like that. If you're not using Vue or Angular or some of those frameworks right now, it's very likely that you can just start running TypeScript 7 today.
52:25You can start off just by installing the TypeScript 7 extension let's say in VS Code or looking up support in your favorite editor and you'll just have something that is so much faster at loading your projects. So you should just give it a shot today. and even if you're using your API and whatnot like you're using TypeScript DSLint to still integrate with TypeScript 6 you can have these things side by side so we have explicit documentation on how to do that on our blog post and you should go check it out in the meantime I think keep an eye on some of the threads that we have on GitHub for API integrators we're working with all these different library and framework teams to try to make sure that what's there is going to be a solid solution for TypeScript 7.1.
53:11They often have some prototypes of, let's say, build and editor integration that are already working. We have a whole bunch of really cool stuff there. I think Johnny Riley, who's worked on TS Loader, recently got TypeScript 7 working with Webpack, which is really cool, right? So you can start using your TypeScript 7 even if you're using Webpack, just through some of the early APIs that we're exposing right now. You know, those require nightly versions of TypeScript, but I think it's really promising. So I guess my plug is, yeah, go try out the new compiler, right? It's so much faster and it's more ready than you think it is.
53:47And we've heard from so many teams that this thing is like a lifesaver for their day-to-day productivity, right? Worked with people at Slack, people at Vanta, you know, many, many companies, like entire companies who are already on TypeScript 7. So yeah, give it a shot. Yeah, that's a great call to action. I have one last question for you, Daniel. I like to end each interview with sort of a palate cleanser, something to talk about that's not work related. What is your situation with fostering cats? And I guess as a sub question, would you recommend fostering cats to people? Oh, absolutely. Our pet cat, Pablo, he is a foster fail, which is when you basically have decided, like, I want to adopt the cat that I'm fostering.
54:32So many years ago, I was watching my sister's cat whenever she was like going out of town for stuff. And every time I had to give her pet back, I was like sad. So my fiance actually suggested what if we start fostering? And so we start off with these three kittens. And it sounds really heartbreaking. Like, oh, you basically, you know, have these small animals and then you have to like let them go. And someone else gets to have them for the rest of your life. But you start to see how happy they make other people. So we've actually fostered, I think, over 12 cats now. Some of them, you know, they come in like twins or triplets as kittens, which is always fun as well.
55:10Some of them will eat at your plants and destroy them if you're not careful or leave little like indentations in the screen of your windows. But we don't regret it at all. I mean, it's a lot of fun. And we, you know, the only thing is like when you travel, it's kind of a pain, but like, hey, I think it's so great. I guess I'm a crazy cat guy, which is fine. My hobbies include coding, cooking, kayaking, and cats. So it's, yeah, I don't know. There's a theme here. There's a definite theme. I have a kitten whose footprints are now immortalized in my bedroom from the repainting in the color of the walls on the floor.
55:49It's great. Incredibly adorable. Yes. Well, Daniel, thank you so much for spending an hour with me. We talked about the history of TypeScript, how you came to the team, TypeScript 6 to TypeScript 7, TypeScript 7.1. Very excited about those APIs. If people wanted to learn more about you and the work you're doing online, where would you direct them? What sorts of websites? On the socials, I guess. Generally, I hang out most in Blue Sky. I'm on Twitter. And maybe one of these. Yeah, I guess those are the two places right now. And GitHub, of course, right? Keep an eye on what I'm posting on GitHub.
56:20We try to keep people up to date with the sorts of plans of TypeScript going forward, development, PRs as well. I code still, even as a product manager. And yeah, catch me at all those places where it's either, I guess, Dan R, D Rosenwasser, or Daniel Rosenwasser as my handles. I'm really great at consistency, as you can tell. There's a joke somewhere in there about programming languages and soundness or some such. But anyway, thank you so much again. This has been wonderful. For Software Engineering Daily, this has been Daniel Rosenwasser and Josh Goldberg. Thanks for listening, everyone. Have a great day.
56:57Thank you.
From the publisher
TypeScript is a programming language that builds on JavaScript by adding a system of types. Those types let developers describe the shape of their data and catch mistakes before code ever runs, while also powering the autocompletion and editor tooling that many developers now rely on every day. It was first released in 2012, and has since become one of the most widely used tools in web development. TypeScript recently underwent one of the most significant changes in its history with the release of version 7.
Daniel Rosenwasser is the Principal Product Manager of TypeScript at Microsoft, where he began as an engineer on the team just weeks after the TypeScript 1.0 release. In this episode, Daniel joins Josh Goldberg to talk about the features of TypeScript 7. They discuss the TypeScript team’s approach to tooling, TypeScript’s relationship with the TC39 standards process behind JavaScript, the new API and IPC boundary, how LLMs could reshape type checking and linting, and more.
Sponsorship inquiries:
sponsor@softwareengineeringdaily.com
The post TypeScript 7 and What Comes Next appeared first on Software Engineering Daily.
