microsoft / microsoft/TypeScript
Google feedback on TS 5.8-beta
还没有人认领这个 Issue。
- 主要语言
- Go
- 星标
- 111k
- 派生
- 14.3k
- 平均合并
- 2 天 4 小时
- 30 天内合并 PR
- 132
描述
### Acknowledgement
- [x] I acknowledge that issues using this template may be closed without further explanation at the maintainer's discretion.
### Comment
This GitHub issue contains feedback on the TS 5.8-beta release from the team that is responsible for keeping Google's internal software working with the latest version of TypeScript.
## Executive summary
* We do not expect to have significant difficulty in upgrading Google to TS 5.8.
* Some changes to our TypeScript code are required to fix compilation.
* Most of the new errors are clearly related to announced changes.
* Detail sections below explain the changes we expect to make to unblock the upgrade.
## Impact summary
| Change description | Announced | Libraries affected |
| -------------------------------------- | --------: | -----------------: |
| Conditional expression checking | Yes | ~0.007% |
| lib.d.ts Changes | Yes | ~0.005% |
The **Announced** column indicates whether we were able to connect the observed change with a section in the [TS5.8-beta announcement].
[TS5.8-beta announcement]: https://devblogs.microsoft.com/typescript/announcing-typescript-5-8-beta/
The following sections give more detailed explanations of the changes listed above.
## Announced Changes
This section reviews all announced changes from the [TS5.8-beta announcement], whether we support these changes at Google, how we will resolve pre-existing issues for these changes (if applicable), and other thoughts.
### Checked Returns for Conditional and Indexed Access Types
We support this change. It improves ergonomics and type checking accuracy and uncovers real unintentional runtime behavior.
The [PR](https://github.com/microsoft/TypeScript/pull/56941) mentions a breaking change to conditional expression checking, which might be worth calling out explicitly in the release notes. We found that this caused errors in ~0.007% of our libraries, generally due to one branch being typed as `any`, causing the other branch to now be checked.
Most of the errors caused this way were legitimate, though some were arguably spurious (e.g. this uncovered [an instance][2] of #17002), while a few sat somewhere [in between][1]. We will work through most of these by just suppressing the error with `// @ts-ignore` and a note advising owners to revisit their code and fix the underlying problems.
[1]: https://www.typescriptlang.org/play/?ts=5.8.0-beta#code/PTAEDkHkBUFEC5QDsCGBLAbgUwDYE9QB7JLUAd0IFccATUFAZwcoFtSAXACxXdAAMUAJwDmoNEgbsUSAMZZCAM1AARHlj6g20hqC48AUCFDRQAXhVqAdKGOc0OxsxYAHdmmJidlZihz5QzoJY7OwEDCgKWAA0oABGlLxovDSEWDqSaH6GYBjuOGqgADL2ANaEGKDMsRnsCe5IMeK63LxkpDJUtKA0WAripCiVlLEy+UxECtkW7ANIdDK+OPyjxFgAPADKw6ozAHwaZHYynOSddJQSEbgEQbWCSPTTWFPiklgodIqPW7E7WJb6BQXGRuDwrEhraC7AAUQmEiGgAEoEaAAN76Gy3Sj3egiMQSKSyeRKP6gAD8yCwZCesJEiNAiFpokY9CQeERAG59ABfIA
[2]: https://www.typescriptlang.org/play/?ts=5.8.0-beta#code/GYVwdgxgLglg9mABFOBBATughgTwBQAeAXIgM5ToxgDmAPugKZYAmCANjmRVdQNoC6AShKMW7TuUo0BiAN4AoRIkZQQ6JBmw4AdDFKbchQYgD8iAohK8C-ANzyAvvKA
These were essentially all instances of TS2322.
### The --erasableSyntaxOnly Option
We support this change, though we will not be able to take advantage of it any time soon. In particular, we're interested in seeing something like #60790, which actually aligns quite well with the Closure-style enums that are very common in our codebase.
### Preserved Computed Property Names in Declaration Files
We support this change, and will leverage it immediately to better handle symbol properties under isolated declarations.
### lib.d.ts changes
We support these changes.
The changed declarations cause a few problems we will need to work around. In particular, the change to the `Window.location` setter broke ~0.004% of our targets, primarily tests mocking out the `Location` object with a `FakeLocation`. We will silence these with `// @ts-ignore`. Additionally, a handful of new declarations conflict with older versions in DefinitelyTyped and we'll need to adjust these dependencies.
### Other changes
The following changes are largely irrelevant in our codebase and we don't have anything to add about them:
* Support for require() of ECMAScript Modules in --module nodenext
* --module node18
* The --libReplacement Flag
* Optimizations on Program Loads and Updates
* Restrictions on Import Assertions Under --module nodenext
## Unannounced Changes
As mentioned above, the change in type checking of conditional expressions is a notable breaking change. While it was technically announced via details in the PR linked in the announcement, it's easy to miss and could stand to be called out more explicitly.
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
先从 TS 5.8-beta 公告和链接的 PR #56941 开始,然后审查此处描述的条件表达式和 lib.d.ts 更改。该 issue 提供的是生态系统反馈,而不是指定某个文件、测试或具体更改,因此除了确定发布文档或编译器行为是否需要后续跟进之外,没有定义的完成目标。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- typescript
- 领域
- compilers
- Issue 类型
- 缺陷
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 停滞
- 描述清晰度
- 需要澄清
- 新手友好度
- 20/100