microsoft / microsoft/TypeScript
Suggestion: should non-null assert propagate?
Chưa có ai nhận issue này.
- 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ả
I was wondering whether ! should be taken into account by the dataflow analysis, and I don't see why it shouldn't.
It is like a cast that says "this value is not null", so from this point I guess the compiler could remove undefined/null from future uses.
For example, I use ! to work around #9631, so I have code that looks like (simplified):
protected dataArrayChanged(changes: ChangeRecord[]) {
// #9631: TS incorrectly infers `change: ChangeRecord | undefined`
for (const change of changes) {
for (let i = 0; i < change!.removed.length; i++)
this.dt.row(i).remove();
if (change!.addedCount > 0)
this.dt.rows.add(this.data.slice(change!.index, change!.index + change!.addedCount));
}
this.dt.draw();
}
Observe how I added 5 ! to make change not null.
The first one could have been enough. After all, once I say "change is not undefined", there is no reason to assume it could be until I modify the variable again.
// Let's say I know x is not undefined
const x: number | undefined;
// Here x: number | undefined, so x! is required
x!.toString();
// Here x: number because of x! above
x.toString(); // ok
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách xem xét hành vi của phân tích luồng dữ liệu được mô tả trong issue này và ngữ cảnh liên quan trong #9631. Tái hiện các ví dụ liên quan đến các non-null assertions lặp lại và xác định ngữ nghĩa lan truyền được dự định. Được coi là hoàn thành khi hành vi được giải quyết một cách nhất quán và được bao phủ bởi các compiler tests phù hợp.
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
- compilers
- Loại issue
- Tính năng
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 30/100