Microsoft/TypeScript

Intersection with a mapped type breaks bypassing private assignability.

Ouverte

#61 743 ouverte le 21 mai 2025

 (0 commentaire) (0 réaction) (0 personne assignée)TypeScript (13 395 forks)batch import
Domain: IntersectionHelp WantedPossible Improvement

Métriques du dépôt

Stars
 (108 860 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

Description

🔎 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

Guide contributeur