7.1 regression: circular type alias accepts an assignment it should reject (opposite of #64891)
メンテナーはふだん 1 日以内に返信
@jasleenkaur-qed42 がすでに取り組んでいます。
2026年10月23日 から。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 48/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- go, typescript
- 領域
- compilers
調査の方向性
Start by running the supplied TypeScript repro with strict mode and compare its result across the noted compiler versions; the report identifies commit microsoft/typescript-go#4820 and a related case in #64891. Trace how circular aliases with two type parameters are checked, including the reported declaration-order and check-order effects. Done when the repro reports TS2322 and the related case still behaves as expected.
索引モデルが issue の本文から書いたものです。
説明
Search Terms
circular type alias variance, missing TS2322, unrelated type arguments assignable, 7.1 regression, #64891
Version & Regression Information
- This changed between versions 7.0.2 and 7.1.0-dev.20261022.1
- This changed in commit or PR microsoft/typescript-go#4820
I bisected it with the nightlies: 7.1.0-dev.20260805.1 (built from 12318e599) reports the error, and 7.1.0-dev.20260806.1 (built from 86cc4767d, the #4820 merge) doesn't.
Playground Link
No response
Code
type Params<T, K> = { config: Config<T, K> };
type Handler<T, K> = (params: Params<T, K>) => void;
type Config<T, K> = { read: (item: T) => void; handler: Handler<T, K> };
declare const a: Handler<string, string>;
export const b: Handler<number, string> = a; // should be TS2322
{ "compilerOptions": { "strict": true, "noEmit": true, "types": [] }, "files": ["a.ts"] }
Actual behavior
No errors. A handler that reads strings is accepted where one that reads numbers is expected.
It's not just close types either: Handler<boolean, { x: 1 }> is accepted too.
Expected behavior
TS2322 on the last line, same as 6.0.3 and 7.0.2.
Additional information about the issue
Hi there!
Some context on how I found this: I've been testing out the latest 7.1 nightlies and I'm super excited about them, mainly for the memory and CPU speedups. We have a very large TypeScript monorepo in production, so those gains make a real difference for us.
While digging into #64891 I found the opposite case, and I think it's the other half of the same bug. That issue is about 7.1 rejecting code it should accept. This one is the opposite, it accepts code it should reject, which is a bit scarier because nothing tells you it happened.
Here's what I see with tsc -p . (same result on every run):
| Build | This repro | #64891 repro |
|---|---|---|
| 6.0.3 | TS2322 (correct) | no errors (correct) |
| 7.0.2 | TS2322 (correct) | no errors (correct) |
| 7.1.0-dev.20261022.1 | no errors (wrong) | TS2322 (wrong) |
| #64893 (6e72aa76c, built locally) | TS2322 (correct) | no errors (correct) |
A few other things I noticed while narrowing it down:
-
It needs two type parameters. With only
T, every build reports the error. -
If I move
HandleraboveParams, the nightly reports the error again. -
#64893 fixes both repros, but the result still depends on what gets checked first. If
Paramsis compared beforeHandler, every build I tried misses theHandlererror, #64893 included:declare const p: Params<string, string>; export const q: Params<number, string> = p; // TS2322 everywhere declare const a: Handler<string, string>; export const b: Handler<number, string> = a; // missed everywhereSo I'm not sure #64893 is the full fix, but it does get things back to how 7.0.2 behaves.
Thanks for all the work on 7.x, it's been great so far!
- 主要言語
- Go
- スター
- 112k
- フォーク
- 15.4k
- 平均マージ
- 3日 6時間
- マージ済み PR(30日)
- 136
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
microsoft/TypeScript のほかの issue
-
Native API: formatDiagnosticsWithColorAndContext drops related information without a file locationオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
microsoft/TypeScript#65087 ·
メンテナーはふだん 1 日以内に返信
-
API: `tsc.exe` opens a visible console window on Windows when the parent process has no consoleオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
microsoft/TypeScript#65083 ·
メンテナーはふだん 1 日以内に返信
-
TS7 LSP: documentHighlight returns nothing when the file path contains '@'再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープンBug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
microsoft/TypeScript#64758 ·
メンテナーはふだん 1 日以内に返信
-
Language server (tsc --lsp) exits with code 1 after `shutdown` and `exit`対応中かも @rajnish-verma-22172 が 12 日前に担当しました。 オープンBug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
microsoft/TypeScript#64742 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Class names `eval` and `arguments` are not reported as invalid strict mode bindings対応中かも @dmety が 25 日前に担当しました。 オープンBug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
microsoft/TypeScript#64661 ·
メンテナーはふだん 1 日以内に返信
microsoft/TypeScript の issue をすべて見る
似ている issue
-
date_time, url_encode, html_escape, to_unix_time, contains_all and contains_any panic when called without arguments対応中かも @antcybersec が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
projectdiscovery/dsl#372 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
JuliusBrussee/caveman#1449 ·
メンテナーはふだん 1 日以内に返信
-
clawsweeper:fix-shape-clear clawsweeper:needs-maintainer-review clawsweeper:needs-product-decision clawsweeper:no-new-fix-pr clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster P2
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
openclaw/gogcli#1291 · コメント 1 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
apache/arrow-swift#209 ·
メンテナーはふだん 1 日以内に返信
-
bug(instrumentation/kafka-go): producer hook writes trace headers into the caller's messages対応中かも @Aryanbhargava18 が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
open-telemetry/opentelemetry-go-compile-instrumentation#1669 ·
メンテナーはふだん 2 日以内に返信