TypeScript 7 が union と intersection の setter アクセス制御を修正
公開日: 2026年8月24日
Microsoft は、union と intersection から合成されるプロパティについて、読み取りと書き込みのアクセス制御を別々に保持する TypeScript ネイティブ型チェッカーの修正をマージしました。
変更点
以前は、これらの合成プロパティで setter のアクセス制御が無視され、実質的に getter のアクセス制御で判定される場合がありました。そのため、public な getter と protected な setter の組み合わせでも、union または intersection を通じた無効な書き込みが許可されることがありました。
declare class C1 { get foo(): number; protected set foo(value: number);}
declare class C2 { get foo(): number; protected set foo(value: number);}
declare const c: C1 | C2;c.foo; // Valid: read access is publicc.foo = 123; // Invalid: write access is protected型チェッカーは書き込み側のアクセス制御を個別に記録するようになりました。foo の読み取りは引き続き有効ですが、代入には正しくアクセスエラーが報告されます。
重要な理由
クラスは読み取りを public にしつつ、書き込みを意図的に制限できます。この修正により、TypeScript がオブジェクト型を union や intersection にまとめても、その境界が維持され、書き込み権限が誤って広がることがなくなります。
利用可能性
この変更は TypeScript 7.0 の後にネイティブ TypeScript コードベースへマージされました。情報源では、この変更を含む安定版 npm バージョンは特定されていないため、この動作に依存する前にインストール済みバージョンのリリースノートを確認してください。
出典
マージ済みの TypeScript pull request を参照してください: Fix getDeclarationModifierFlagsFromSymbolEx for synthetic properties。