microsoft / microsoft/TypeScript

In a class, an unique symbol attribute is sometime lost during incremental build

Đang mở
#63,644 9 bình luận 0 reaction 0 người được giao Xem trên GitHub
Needs More Info
Ngôn ngữ chính
Go
Star
111k
Fork
14.3k
Merge trung bình
2 ngày 4 giờ
Pull request đã merge (30 ngày)
132

Mô tả

### 🔎 Search Terms

- unique property
- incremental build
- interface declaration merging

### 🕗 Version & Regression Information

- Tested with 6.0.2 and 6.0.3

### ⏯ Playground Link

[Playground Link](https://www.typescriptlang.org/play/?ts=6.0.0-dev.20260416#code/MYewdgzgLgBAygTQLICEDyAZAXDArmASwEdcBTGCATwFsAjEAGxgF54b6GAKASgG4AofsAYBDCBBgANGAG9BMBTAAOAJxBRSwDQBMYIqFBUsYAIhABrEwP6KYK0iO3gGlGAG1EqTAF1jZy9a2quqaOjAAZiAgPLI2tooA9Al4EOQEUHHxMFAAFgQQHsjoGN4CtgC+-JX8UJRK5AAqADwAcjCkAB4aYNoS0CoEYADmAHzGAEqaICraTQAGjtoAJDIt5XMANDAxzGMAbiAE2iPWgxoq4SLA5NKd3b0wzSY5IMAmYzLVoJCwHcafegkkgEHQAdIsXsAgA)

### 💻 Code

I do not have a minimal reproductible exemple as the issue seems to come from the incremental build.

I had a class with an unique symbol property, on which I was doing interface declaration merging:
```ts
const SYMBOL: unique symbol = Symbol();

class X {

protected attr = "ok";

readonly [SYMBOL] = "ok";

protected foo() {
// use it
this[SYMBOL];
}
}

type T = Record<`add${N}`, () => void>;

interface X extends T<"hoc"> {}

const x = {} as X;
x.addhoc
```

### 🙁 Actual behavior

The following error first appeared when I set some of the public attributes as protected (the error below is edited to match the provided exemple) :
```
ERROR in [...]
TS7053: Element implicitly has an 'any' type because expression of type 'unique symbol' can't be used to index type 'X'.
Property '[????.SYMBOL]' does not exist on type 'X'.
92 |
93 | protected foo() {
> 94 | this[SYMBOL];
| ^^^^^^^^^^^^^^^^
95 | }
```

I noticed that :
- The error disappear if I delete all of TS cache files.
- The error reappear if I rebuild without any changes to the files.
- The error reappear if I edit the files that defines `X`.
- The error does not reappear if I change other files.
- In watch mode, the error sometimes disappear and reappear when I change the files that defines `X`.
- The error doesn't appear in my VSC editor.

### 🙂 Expected behavior

No TS errors.

### Additional information about the issue

I also reproduced the error with `tsc --noEmit`, so it doesn't seem to come from my Webpack build system.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu với ví dụ Playground được liên kết và tái hiện nó bằng tsc --noEmit, sau đó so sánh các build sạch và build incremental trong khi thay đổi các tệp định nghĩa X; hoàn thành khi các lần rebuild lặp lại không còn tạo ra TS7053 cho việc truy cập này.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
typescript
Lĩnh vực
build-system, compilers
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Cần làm rõ
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.