Repository navigation
Type assertion regression in TypeScript 5.7 #60573
Description
Activity
Andarist commented
on Nov 24, 2024 ContributorMore actionsThis ia display-only bug introduced by #59282 . For type printing purposes it reuses here the assertion type but it misses the fact that this type can be processed by the template of a mapped type.
How do we know it's just a display-only bug? Just inspect this:
type Test2 = Unwrap<typeof value>["prop1"] // ^? type Test2 = "hello"
You're right that my minimal reproduction is a display-only bug. But in a larger codebase, I am seeing a very similar example break type-inference and checking for a Zod schema. What's weirder is that the larger example displays correctly in my IDE, but only errors when running
tsc.I will try to refine my reproduction above to see if I can produce the type-checking regression.
Andarist commented
on Nov 24, 2024 ContributorMore actionsIt would be appreciated because it should be a completely different bug. Fixing this display-only bug is just very unlikely to fix what you are describing above.
Mateusz Burzyński (@Andarist) I haven't yet been able to reproduce the issue without using Zod, but here is a simplified example of the problem with Zod:
- Repo: https://github.com/denk0403/ts5.7-zod-bug
- CodeSandbox: https://codesandbox.io/p/devbox/vhjqw5
It seems like the problem also somehow relates to using
"composite": trueand"incremental": true, since before I split the files into their own projects, I did not see the error.Andarist commented
on Nov 24, 2024 ContributorMore actionsAh, well - so this is actually the same issue. A type display issue like this is a type serialization issue after all and that affects emitted declaration files too (and that's what happens in your repro above). My fix should cover this already, I'll consider adding some extra tests for this too
Reacted by Dennis Kats and Damjan Polugic- addedBugA bug in TypeScriptA bug in TypeScriptHelp WantedYou can do thisYou can do this
on Nov 27, 2024 - addedFix AvailableA PR has been opened for this issueA PR has been opened for this issue
on Dec 4, 2024 - locked as resolved and limited conversation to collaborators
on Oct 22, 2025
🔎 Search Terms
"typescript 5.7", "type assertions", "casting", "regression", "zod", "tsc"
🕗 Version & Regression Information
⏯ Playground Link
https://www.typescriptlang.org/play/?ts=5.7.2#code/C4TwDgpgBA6gTgQzJOAeAKgPigXigbwCgoSoB9USALinUIF9DCAzAVwDsBjYASwHt2UAM7A4PdgHN4SFAAoAlDWnIIaEWMnYipKHAjBWcQfnKUINAEQWojRiw7d+gvgCMAVspQYoEAB7AIdgATISgAJQhOPjgg1HVxCQAaWEQVNAR2EExs2Vc3GnRFFJlVDC1iUj0DIwJTcHMoPJsGJij2ESgANwQAG1ZoPDzPVVltUjA4PjAARhp4yWG4BSgEUMXUCwALCB6evgtMBnkmMygAVXYAd1TvPwDgtdSvDKzsPHQAbQByCnqvgF0fP5AiFwpForF5klimlUC9slAKiQAPy1D4AaQgICg4igAGssXxmLRvr9IAD-jQLtckBhSWYARisf9sPREToCvS-v8TvVaBAOnhqTczESur1+ocAPRS0gAPWRQA
💻 Code
🙁 Actual behavior
The type of
Testis{ prop1: Wrapper<"hello">; }in v5.7.This is wrong because the
Unwraptype should recursively extract the underlying type of eachWrapper.🙂 Expected behavior
The type of
Testshould be{ prop1: "hello"; }, like it is in v5.6.Additional information about the issue
This issue seems related to the inline type assertion on line 14. The inference is corrected if the type assertion happens on a separate line, such as:
This is a simplified version of an issue I'm seeing with some Zod schemas after upgrading to TypeScript 5.7.