microsoft / microsoft/TypeScript
Instantiations of constrained generic signatures allow all assignments
@weswigham がすでに取り組んでいます。
2023年9月7日 から。
- 主要言語
- Go
- スター
- 111k
- フォーク
- 14.4k
- 平均マージ
- 1日 19時間
- マージ済み PR(30日)
- 117
説明
🔎 Search Terms
variance generic signature measurement
🕗 Version & Regression Information
This has been our behavior forever as far as I can tell - in fact, I've seen this pattern used once or twice to work around other bugs, even though the behavior is in no way safe.
⏯ Playground Link
💻 Code
type Fn<T> = <U extends T>(x: U) => U;
type Concrete1 = <U extends number>(x: U) => U;
type Concrete2 = <U extends string>(x: U) => U;
function f<T1, T2>(t1: Fn<T1>, t2: Fn<T2>, c1: Concrete1, c2: Concrete2) {
// every single one of these assignments should error
t1 = t2; // should error, but doesn't
t2 = t1; // should error, but doesn't
c1 = c2;
c2 = c1;
t1 = c1;
c1 = t1;
}
🙁 Actual behavior
Missing two errors on the generic relationships.
🙂 Expected behavior
All of the assignments are errors, as the generic relationship should be even stricter than the non-generic one.
Additional information about the issue
The issue lies in our variance analysis - we currently incorrectly measure T as independent, which is quite different from the invariant it should adopt (via U's invariant usages). This discrepancy arises because of some oddities in how we do generic signature relationships.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
評価
この issue はまだ評価されていません。