Microsoft/TypeScript

Intersection with a mapped type breaks bypassing private assignability.

Open

#61,743 创建于 2025年5月21日

在 GitHub 查看
 (0 评论) (0 反应) (0 负责人)TypeScript (6,726 fork)batch import
Domain: IntersectionHelp WantedPossible Improvement

仓库指标

Star
 (48,455 star)
PR 合并指标
 (平均合并 6天 17小时) (30 天内合并 9 个 PR)

描述

🔎 Search Terms

private assignability intersection mapped type

🕗 Version & Regression Information

Latest as of today.

⏯ Playground Link

https://www.typescriptlang.org/play/?#code/CYUwxgNghgTiAEkoGdnwBrwN4CgCQADjAJYBuUALglAFzwB2ArgLYBGIMA3Pq3chSXoBzbgF8cOCgE8CCAJrwAvNni0GLdjHij4AMhW94-QUO3dps+AC0l8AArEwAawA8WVXSZsO2gDTwAcigAgD49Az4BYmEzCVAkOHgIEAp4AA86dG546ETk1Kk6OWzwXIR8+AAvOituHDTbKVU0BX0s+ttK5utw9qA

💻 Code

Given

declare class X {
	private a: number;
	b: string;
}

You're allowed to do:

type Y = { a: number } & { b: string };
declare let y: Y;
let x: X = y as Y & X;

But fails with:

type Z = Pick<{ a: number }, 'a'> & { b: string };
declare let z: Z;
let x: X = z as Z & X;

🙁 Actual behavior

X bypasses private assignability, but the identical type Y errors.

🙂 Expected behavior

Either neither type is allowed to bypass private assignability, or both types are, since they're identical.

Additional information about the issue

No response

贡献者指南