microsoft / microsoft/TypeScript
Intersection for same key read-only property maybe wrong
還沒有人認領這個 Issue。
- 主要語言
- Go
- 星號
- 111k
- 分支
- 14.3k
- 平均合併
- 2 天 4 小時
- 30 天內合併 PR
- 132
描述
### 🔎 Search Terms
Intersection readonly property
### 🕗 Version & Regression Information
- This changed between versions 4.4.4 and 4.5.5 (But all versions have errors)
### ⏯ Playground Link
https://www.typescriptlang.org/play/?ts=5.4.5#code/FAFwngDgpgBAgjAvDA3jA1gLhgOwK4C2ARlAE4wC+oksAQkqjKVAIYAmA9jgDZgbb5iZSsGAAKFBRgsAzvBgAyGLQCUAOnQMADAG5xk6XPpK46zcl2jw0GAFkW6KAHVSASxAsi3KAB4AKgB8DGgAtMzsXLwwANoA0jCuOBhQYBwAZjB+ALrYfnFZlHqiVjQwAMIM9o4u7p7ePrQBehJSsuVm2s0GbRVKqhqd+q1Giu0DFkVAA
### 💻 Code
```ts
type A = { k: number }
type B = { readonly k: number }
({} as A & B).k = 0;
({} as B & A).k = 0;
type MakeWritable = { -readonly [K in keyof T]: T[K] };
type C = MakeWritable;
({} as C).k = 0;
({} as C & B).k = 0;
({} as B & C).k = 0;
```
### 🙁 Actual behavior
command:
```
z:\webdl\test>tsc --target esnext --lib esnext test.ts
```
output:
```
test.ts:15:15 - error TS2540: Cannot assign to 'k' because it is a read-only property.
15 ({} as C & B).k = 0;
~
test.ts:16:15 - error TS2540: Cannot assign to 'k' because it is a read-only property.
16 ({} as B & C).k = 0;
~
Found 2 errors in the same file, starting at: test.ts:15
```
### 🙂 Expected behavior
no error.
### Additional information about the issue
_No response_
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
先從 Playground 連結和 `test.ts` 重現開始,然後執行所示的 `tsc --target esnext --lib esnext test.ts` 指令。追蹤 TypeScript 的 checker 如何處理交集型別和 readonly 屬性;當兩個 `C` 交集型別指派能在沒有 TS2540 的情況下編譯,同時重現仍受到涵蓋時,即表示完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- typescript
- 領域
- compilers
- Issue 類型
- 缺陷
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100