microsoft / microsoft/TypeScript
Intersection with a mapped type breaks bypassing private assignability.
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
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
```ts
declare class X {
private a: number;
b: string;
}
```
You're allowed to do:
```ts
type Y = { a: number } & { b: string };
declare let y: Y;
let x: X = y as Y & X;
```
But fails with:
```ts
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 de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la reproduction TypeScript Playground liée et comparez l’assignabilité pour l’intersection explicite et l’intersection basée sur Pick. Suivez la gestion par le compilateur de l’assignabilité des membres privés et le comportement des intersections de types mappés, puis vérifiez que les deux exemples équivalents produisent des résultats cohérents.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100