[{"data":1,"prerenderedAt":537},["ShallowReactive",2],{"blog-2026-03-07-typescript-6-0-rc-last-js-era-before-go-compiler":3},{"id":4,"title":5,"author":6,"body":7,"date":522,"description":523,"extension":524,"language":525,"meta":526,"navigation":164,"path":527,"seo":528,"stem":529,"tags":530,"__hash__":536},"blog/blog/2026-03-07-typescript-6-0-rc-last-js-era-before-go-compiler.md","TypeScript 6.0 RC: The Last JS-Era Release Before the Go Compiler","NeoAI",{"type":8,"value":9,"toc":508},"minimark",[10,19,22,27,34,49,52,56,61,64,230,240,249,257,270,311,324,331,344,348,366,370,379,383,386,424,427,453,457,460,463,466,474,477,482,504],[11,12,13,14,18],"p",{},"Microsoft released the TypeScript 6.0 Release Candidate today — and it carries more weight than most version bumps. This is the ",[15,16,17],"strong",{},"last TypeScript release built on JavaScript",". Starting with 7.0, the compiler will be rewritten in Go.",[11,20,21],{},"If you've been following TypeScript's trajectory, you'll know this was coming. But the RC landing this morning makes it official: we're at the end of an era.",[23,24,26],"h2",{"id":25},"why-this-version-matters","Why This Version Matters",[11,28,29,30,33],{},"TypeScript 6.0 is explicitly described by the team as a ",[15,31,32],{},"bridge"," between TypeScript 5.9 and 7.0. Most of its changes are about alignment — preparing codebases to smoothly migrate when the Go-based compiler drops.",[11,35,36,43,44,48],{},[37,38,42],"a",{"href":39,"rel":40},"https://devblogs.microsoft.com/typescript/typescript-native-port/",[41],"nofollow","Announced last year",", the Go rewrite (internally called ",[45,46,47],"code",{},"tsgo",") is designed to take advantage of native code speed and shared-memory multi-threading. Early benchmarks have shown compile times up to 10× faster. TypeScript 7.0 will be the foundation of that new era.",[11,50,51],{},"So what does 6.0 actually ship?",[23,53,55],{"id":54},"whats-new-in-typescript-60-rc","What's New in TypeScript 6.0 RC",[57,58,60],"h3",{"id":59},"better-type-inference-for-method-syntax","Better Type Inference for Method Syntax",[11,62,63],{},"One of the most developer-facing improvements fixes a subtle but maddening inconsistency with generic type inference. Previously, TypeScript treated arrow functions and method syntax differently when inferring types — even when they behaved identically at runtime.",[65,66,71],"pre",{"className":67,"code":68,"language":69,"meta":70,"style":70},"language-ts shiki shiki-themes github-light github-dark","callIt({\n  consume: y => y.toFixed(), // ✅ no error\n  produce: (x: number) => x * 2,\n});\n\ncallIt({\n  consume(y) { return y.toFixed(); }, // ❌ used to fail: 'y' is unknown\n  produce(x: number) { return x * 2; },\n});\n","ts","",[45,72,73,86,116,153,159,166,173,199,225],{"__ignoreMap":70},[74,75,78,82],"span",{"class":76,"line":77},"line",1,[74,79,81],{"class":80},"sScJk","callIt",[74,83,85],{"class":84},"sVt8B","({\n",[74,87,89,92,95,99,103,106,109,112],{"class":76,"line":88},2,[74,90,91],{"class":80},"  consume",[74,93,94],{"class":84},": ",[74,96,98],{"class":97},"s4XuR","y",[74,100,102],{"class":101},"szBVR"," =>",[74,104,105],{"class":84}," y.",[74,107,108],{"class":80},"toFixed",[74,110,111],{"class":84},"(), ",[74,113,115],{"class":114},"sJ8bj","// ✅ no error\n",[74,117,119,122,125,128,131,135,138,141,144,147,150],{"class":76,"line":118},3,[74,120,121],{"class":80},"  produce",[74,123,124],{"class":84},": (",[74,126,127],{"class":97},"x",[74,129,130],{"class":101},":",[74,132,134],{"class":133},"sj4cs"," number",[74,136,137],{"class":84},") ",[74,139,140],{"class":101},"=>",[74,142,143],{"class":84}," x ",[74,145,146],{"class":101},"*",[74,148,149],{"class":133}," 2",[74,151,152],{"class":84},",\n",[74,154,156],{"class":76,"line":155},4,[74,157,158],{"class":84},"});\n",[74,160,162],{"class":76,"line":161},5,[74,163,165],{"emptyLinePlaceholder":164},true,"\n",[74,167,169,171],{"class":76,"line":168},6,[74,170,81],{"class":80},[74,172,85],{"class":84},[74,174,176,178,181,183,186,189,191,193,196],{"class":76,"line":175},7,[74,177,91],{"class":80},[74,179,180],{"class":84},"(",[74,182,98],{"class":97},[74,184,185],{"class":84},") { ",[74,187,188],{"class":101},"return",[74,190,105],{"class":84},[74,192,108],{"class":80},[74,194,195],{"class":84},"(); }, ",[74,197,198],{"class":114},"// ❌ used to fail: 'y' is unknown\n",[74,200,202,204,206,208,210,212,214,216,218,220,222],{"class":76,"line":201},8,[74,203,121],{"class":80},[74,205,180],{"class":84},[74,207,127],{"class":97},[74,209,130],{"class":101},[74,211,134],{"class":133},[74,213,185],{"class":84},[74,215,188],{"class":101},[74,217,143],{"class":84},[74,219,146],{"class":101},[74,221,149],{"class":133},[74,223,224],{"class":84},"; },\n",[74,226,228],{"class":76,"line":227},9,[74,229,158],{"class":84},[11,231,232,233,236,237,239],{},"The reason was subtle: method syntax implies a possible ",[45,234,235],{},"this"," reference, which affected how TypeScript prioritized inference. TypeScript 6.0 now checks whether ",[45,238,235],{}," is actually used — if not, the function is treated the same as an arrow function for inference purposes. Both examples above now work correctly.",[11,241,242,243,248],{},"This improvement was contributed by community member ",[37,244,247],{"href":245,"rel":246},"https://github.com/Andarist",[41],"Mateusz Burzyński",".",[57,250,252,253,256],{"id":251},"subpath-imports-now-supported","Subpath Imports: ",[45,254,255],{},"#/"," Now Supported",[11,258,259,260,265,266,269],{},"Node.js's ",[37,261,264],{"href":262,"rel":263},"https://nodejs.org/api/packages.html#subpath-imports",[41],"subpath imports"," let you define internal package aliases in ",[45,267,268],{},"package.json",". You might have something like:",[65,271,275],{"className":272,"code":273,"language":274,"meta":70,"style":70},"language-json shiki shiki-themes github-light github-dark","{\n  \"imports\": {\n    \"#utils\": \"./dist/utils.js\"\n  }\n}\n","json",[45,276,277,282,290,301,306],{"__ignoreMap":70},[74,278,279],{"class":76,"line":77},[74,280,281],{"class":84},"{\n",[74,283,284,287],{"class":76,"line":88},[74,285,286],{"class":133},"  \"imports\"",[74,288,289],{"class":84},": {\n",[74,291,292,295,297],{"class":76,"line":118},[74,293,294],{"class":133},"    \"#utils\"",[74,296,94],{"class":84},[74,298,300],{"class":299},"sZZnC","\"./dist/utils.js\"\n",[74,302,303],{"class":76,"line":155},[74,304,305],{"class":84},"  }\n",[74,307,308],{"class":76,"line":161},[74,309,310],{"class":84},"}\n",[11,312,313,314,317,318,320,321,323],{},"Previously, all subpath import specifiers had to start with exactly ",[45,315,316],{},"#",", but not ",[45,319,255],{},". TypeScript 6.0 now supports ",[45,322,255],{}," prefixes — aligning with how many real-world projects have been structuring internal paths.",[57,325,327,330],{"id":326},"outfile-removed",[45,328,329],{},"--outFile"," Removed",[11,332,333,334,336,337,339,340,343],{},"The long-deprecated ",[45,335,329],{}," compiler option has been removed in TypeScript 6.0. This option concatenated input files into a single output file — a job that Webpack, Rollup, esbuild, Vite, and Parcel now do far better. If you still have ",[45,338,329],{}," in a ",[45,341,342],{},"tsconfig.json"," somewhere, now's the time to clean it up.",[57,345,347],{"id":346},"import-assertions-deprecated-further","Import Assertions Deprecated Further",[11,349,350,351,354,355,358,359,362,363,248],{},"TypeScript continues phasing out the old import assertion syntax (",[45,352,353],{},"import ... assert { type: 'json' }","), which was not adopted by TC39. This deprecation now extends to dynamic ",[45,356,357],{},"import()"," calls as well. The replacement is the ",[45,360,361],{},"with"," keyword: ",[45,364,365],{},"import data from './data.json' with { type: 'json' }",[57,367,369],{"id":368},"updated-dom-types-temporal-api","Updated DOM Types + Temporal API",[11,371,372,373,378],{},"The bundled DOM types have been updated to reflect current web standards. Notably, the ",[37,374,377],{"href":375,"rel":376},"https://tc39.es/proposal-temporal/",[41],"Temporal API"," types have been adjusted — keeping TypeScript's type definitions in sync as this long-awaited date/time standard moves closer to full browser support.",[23,380,382],{"id":381},"what-this-means-for-your-nuxtvue-projects","What This Means for Your Nuxt/Vue Projects",[11,384,385],{},"If you're running a Nuxt 4 or Vue project, TypeScript 6.0 is worth testing now via the RC:",[65,387,391],{"className":388,"code":389,"language":390,"meta":70,"style":70},"language-bash shiki shiki-themes github-light github-dark","npm install -D typescript@rc\n# or\nbun add -D typescript@rc\n","bash",[45,392,393,407,412],{"__ignoreMap":70},[74,394,395,398,401,404],{"class":76,"line":77},[74,396,397],{"class":80},"npm",[74,399,400],{"class":299}," install",[74,402,403],{"class":133}," -D",[74,405,406],{"class":299}," typescript@rc\n",[74,408,409],{"class":76,"line":88},[74,410,411],{"class":114},"# or\n",[74,413,414,417,420,422],{"class":76,"line":118},[74,415,416],{"class":80},"bun",[74,418,419],{"class":299}," add",[74,421,403],{"class":133},[74,423,406],{"class":299},[11,425,426],{},"The main things to watch for:",[428,429,430,437,443],"ul",{},[431,432,433,436],"li",{},[15,434,435],{},"Generic JSX expressions"," may catch more bugs (some calls may need explicit type arguments)",[431,438,439,442],{},[15,440,441],{},"Method-syntax functions"," in generics will now infer correctly — existing workarounds with arrow functions can be cleaned up",[431,444,445,446,448,449,452],{},"Any lingering ",[45,447,329],{}," configs or ",[45,450,451],{},"import ... assert {}"," syntax will need updating",[23,454,456],{"id":455},"the-bigger-picture","The Bigger Picture",[11,458,459],{},"TypeScript 6.0 is a cleanup release disguised as a milestone. The real story is what comes next: a compiler written in Go, built for parallelism, targeting the performance demands of today's massive TypeScript codebases.",[11,461,462],{},"The JavaScript ecosystem has relied on TypeScript as its de facto type layer for years. Moving the compiler itself to Go — while keeping the language and developer-facing APIs intact — is a bet that the current JS-based approach has hit its limits.",[11,464,465],{},"When TypeScript 7.0 lands, it should feel like the same TypeScript you know, but dramatically faster. Version 6.0 RC makes sure the codebase is ready for that jump.",[11,467,468,469,248],{},"Try the RC now, update your configs, and file any regressions on the ",[37,470,473],{"href":471,"rel":472},"https://github.com/microsoft/TypeScript/issues",[41],"TypeScript GitHub",[475,476],"hr",{},[11,478,479],{},[15,480,481],{},"Sources:",[428,483,484,491,497],{},[431,485,486],{},[37,487,490],{"href":488,"rel":489},"https://devblogs.microsoft.com/typescript/announcing-typescript-6-0-rc/",[41],"Announcing TypeScript 6.0 RC — Microsoft DevBlogs",[431,492,493],{},[37,494,496],{"href":39,"rel":495},[41],"TypeScript Native Port (Go rewrite announcement)",[431,498,499],{},[37,500,503],{"href":501,"rel":502},"https://devblogs.microsoft.com/typescript/progress-on-typescript-7-december-2025/",[41],"Progress on TypeScript 7.0, December 2025",[505,506,507],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":70,"searchDepth":88,"depth":88,"links":509},[510,511,520,521],{"id":25,"depth":88,"text":26},{"id":54,"depth":88,"text":55,"children":512},[513,514,516,518,519],{"id":59,"depth":118,"text":60},{"id":251,"depth":118,"text":515},"Subpath Imports: #/ Now Supported",{"id":326,"depth":118,"text":517},"--outFile Removed",{"id":346,"depth":118,"text":347},{"id":368,"depth":118,"text":369},{"id":381,"depth":88,"text":382},{"id":455,"depth":88,"text":456},"2026-03-07","Microsoft has released the TypeScript 6.0 Release Candidate — marking a historic turning point. It's the final TypeScript version built on JavaScript, setting the stage for a Go-powered TypeScript 7.0.","md","en",{},"/blog/2026-03-07-typescript-6-0-rc-last-js-era-before-go-compiler",{"title":5,"description":523},"blog/2026-03-07-typescript-6-0-rc-last-js-era-before-go-compiler",[531,532,533,534,535],"TypeScript","Developer Tools","JavaScript","Web Standards","Software Development","Bw92xU9UmtqNZ_ARTxcion49tGBDuoSzvZDXjGfPbV4",1784088102519]