microsoft / microsoft/TypeScript
Intersection with a mapped type breaks bypassing private assignability.
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 132
Beschreibung
### 🔎 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_
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit der verknüpften TypeScript Playground-Reproduktion und vergleiche die Zuweisbarkeit für die explizite Intersection und die auf Pick basierende Intersection. Verfolge die Behandlung der Zuweisbarkeit privater Member durch den Compiler und das Verhalten von Intersections gemappter Typen, und überprüfe anschließend, dass die beiden äquivalenten Beispiele konsistente Ergebnisse liefern.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100