From a970683e86dd515879f54e09e315602948296c27 Mon Sep 17 00:00:00 2001 From: suin Date: Fri, 11 Sep 2026 19:40:43 +0900 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=E5=A4=89=E6=80=A7=E3=80=8D=E3=81=AE?= =?UTF-8?q?=E7=B6=99=E6=89=BF=E9=96=A2=E4=BF=82=E3=81=AE=E8=AA=AC=E6=98=8E?= =?UTF-8?q?=E3=82=92=E3=82=B3=E3=83=BC=E3=83=89=E3=81=AB=E5=90=88=E3=82=8F?= =?UTF-8?q?=E3=81=9B=E3=81=A6=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=BE=E3=81=97?= =?UTF-8?q?=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 対象者 - [x] 📖 読者 ## Problem 「変性 (variance)」ページの「クラスの継承関係を使った例」セクションで、クラスの継承関係の説明が実際のコードと逆になっていました。 説明文は「`A`は`B`を継承し、`B`は`C`を継承しており」となっていましたが、直後のサンプルコードは `class B extends A`、`class C extends B` であり、実際は `B` が `A` を、`C` が `B` を継承しています。 このセクション以降の解説(「戻り値`C`は`B`のサブタイプなので」「引数`A`は`B`のスーパータイプなので」など)はコードどおりの継承関係を前提に書かれているため、読者は説明文とコード・解説のどちらが正しいのか判断できず、変性の理解に必要なサブタイプ/スーパータイプの向きを取り違えるおそれがありました。 ## Solution 説明文の継承関係をサンプルコードに合わせて修正しました。 ``` - `A`は`B`を継承し、`B`は`C`を継承しており、メソッドを追加しました。 + `B`は`A`を継承し、`C`は`B`を継承しており、それぞれメソッドを追加しました。 ``` なお、同ページの「ユニオン型を使った例」(`A = null` / `B = null | undefined` / `C = null | undefined | string`)はクラスの例とは逆に `A` が部分型ですが、本文中でその旨が明記されているため変更していません。 ## Value 読者がサンプルコードと説明文の食い違いに戸惑うことなく、`A`・`B`・`C` のサブタイプ関係を正しく理解した上で、共変・反変・不変の挙動を読み進められるようになります。 --- Close #1130 --- docs/reference/generics/variance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/generics/variance.md b/docs/reference/generics/variance.md index 44c0d82d..2feb59bc 100644 --- a/docs/reference/generics/variance.md +++ b/docs/reference/generics/variance.md @@ -44,7 +44,7 @@ type InvariantFunction = BivariantFunction; ## クラスの継承関係を使った例 -継承関係がわかりやすくなるようにクラス`A`, `B`, `C`を定義します。`A`は`B`を継承し、`B`は`C`を継承しており、メソッドを追加しました。 +継承関係がわかりやすくなるようにクラス`A`, `B`, `C`を定義します。`B`は`A`を継承し、`C`は`B`を継承しており、それぞれメソッドを追加しました。 ```ts twoslash class A {